From c2c6e01fc7eca3a98cb92bee5c34fcdc5e7b550f Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 21:25:28 +0200 Subject: [PATCH 01/15] booster faktor to giveStatusPoints --- main.js | 8 +++++--- src/main.ts | 3 ++- src/settings.ts | 7 +++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/main.js b/main.js index d24820f..529aa25 100644 --- a/main.js +++ b/main.js @@ -63,7 +63,8 @@ var defaultSettings = { dailyNoteCreationTask: 0, dailyNoteCreationDate: "12.08.2023", weeklyNoteCreationTask: 0, - weeklyNoteCreationDate: "12.08.2023" + weeklyNoteCreationDate: "12.08.2023", + streakbooster: 0 }; var GamificationPluginSettings = class extends import_obsidian.PluginSettingTab { constructor(app2, plugin) { @@ -2941,7 +2942,6 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` } new import_obsidian2.Notice("note majurity updated!"); console.log("note majurity updated!"); - await this.updateAvatarPage(this.settings.avatarPageName); await this.updateStatusBar(this.statusbarGamification); } else { console.error("file was not found to calculate majurities. Make sure one is active."); @@ -3059,10 +3059,11 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` } async giveStatusPoints(pointsToAdd) { let boosterFactor = 1; + let streakbooster = this.settings.streakbooster; if (this.settings.badgeBoosterState) { boosterFactor = this.settings.badgeBoosterFactor; } - this.settings.statusPoints = pointsToAdd * boosterFactor + this.settings.statusPoints; + this.settings.statusPoints = pointsToAdd * (boosterFactor + streakbooster) + this.settings.statusPoints; await this.saveData(this.settings); return this.updateAvatarPage(this.settings.avatarPageName); } @@ -3409,3 +3410,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgY3JlYXRlZC5gKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpO1xyXG5cdFx0fSBlbHNlIGlmIChpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0Ly8gZG8gbm90aGluZ1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgbm90ZSBjcmVhdGlvbiB3YXMgcmF0ZWQgYWxyZWFkeSB0b2RheS5gKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IDE7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpIHtcclxuXHRcdGxldCBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzID0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0aWYgKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPCA3KSB7XHJcblx0XHRcdGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMrKztcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXM7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblxyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24oY3VycmVudFdlZWtseUNyZWF0ZWROb3Rlcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24obmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyKSB7XHJcblx0XHRpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA8PSA2KSB7XHJcblx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9IGVsc2UgaWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPT0gNykge1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSk7XHJcblx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB1cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyOiBIVE1MU3BhbkVsZW1lbnQpe1xyXG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHModGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpXHJcblx0XHRjb25zdCBwcm9ncmVzc2JhclBlcmNlbnQgPSAodGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMFxyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9YClcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyOiBudW1iZXIsIGJhckxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRsZXQgcHJvZ3Jlc3NiYXIgPSAnJ1xyXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gY2hhck51bVByb2dyZXNzYmFyOyBpKyspIHtcclxuXHRcdFx0aWYgKGkgPD0gYmFyTGVuZ3RoKSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJz0nXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJy0nXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9ncmVzc2JhcjtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZFNldHRpbmdzKCknKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0bGV0IHN0cmVha2Jvb3N0ZXIgPSB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXI7XHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3IgPSB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyKSArIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHVwZGF0ZUF2YXRhclBhZ2UoYXZhdGFyUGFnZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgY3VycmVudCBzdGF0dXNQb2ludHM6ICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHN9YClcclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5sZXZlbEFuZFBvaW50c1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXndlZWtseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMyA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMyA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvLyByZWFkIGN1cnJlbnQgUG9pbnRzIGZyb20gc2V0dGluZ3NcclxuXHRcdGNvbnN0IG5ld1BvaW50cyA9IHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblxyXG5cdFx0Y29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhuZXdQb2ludHMpO1xyXG5cdFx0bGV0IG5leHRMZXZlbEF0ID0gdGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbDtcclxuXHRcdGxldCByZWNlaXZlQmFkZ2UgPSBmYWxzZVxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPCBsZXZlbC5sZXZlbCl7XHJcblx0XHRcdC8vIExldmVsIFVwIGFyY2hpdmVkXHJcblx0XHRcdG5ldyBOb3RpY2UoYFdpdGggJHtuZXdQb2ludHN9IHBvaW50cywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgJHtsZXZlbC5sZXZlbH0uYClcclxuXHRcdFx0Ly8gY2hlY2sgZmlyc3QgaWYgdGhpcyBtZWFucyBhIG5ldyBiYWRnZSBiZWZvcmUgaXQgZ2V0cyBvdmVyd3JpdHRlblxyXG5cdFx0XHRyZWNlaXZlQmFkZ2UgPSBjaGVja0lmUmVjZWl2ZUFCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsLCBsZXZlbC5sZXZlbClcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IGxldmVsLmxldmVsO1xyXG5cdFx0XHRuZXh0TGV2ZWxBdCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NCYXJFbmQgPSBuZXh0TGV2ZWxBdCAtIG5ld1BvaW50cztcclxuXHRcdGNvbnN0IG5ld1BvaW50c1N0cmluZyA9ICd8ICoqTGV2ZWwqKiAgfCAqKicgKyBsZXZlbC5sZXZlbCArICcqKiB8XFxufCBQb2ludHMgfCAnICsgbmV3UG9pbnRzICsgJyAgICB8XFxuXmxldmVsQW5kUG9pbnRzXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtFeHByaXJpZW5jZV1cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxcbiAgICBkYXRhOiBbJyArIG5ld1BvaW50cyArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIHByb2dyZXNzQmFyRW5kICsgJ11cXG54TWluOiAnICsgbGV2ZWwucG9pbnRzICsgJ1xcbnhNYXg6ICcgKyBsZXZlbC5wb2ludHNOZXh0ICsgJ1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCdcclxuXHRcdGNvbnN0IGRhaWx5Q2hhbGxlbmdlID0gJ3wgKipkYWlseSBOb3RlcyoqIHwgKjUwMEVQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICcvNyoqICAgfFxcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbZGF5cyBkb25lIGluIGEgcm93XVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcXG4gICAgZGF0YTogWycgKyB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gKyAnXVxcbnhNaW46IDBcXG54TWF4OiA3XFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJztcclxuXHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsICYmIHJlZmVyZW5jZTMgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHJcblxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld1BvaW50c1N0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCBkYWlseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczMgPSBbLi4ubmV3TGluZXMyLnNsaWNlKDAsIHN0YXJ0MyksIHdlZWtseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMyLnNsaWNlKGVuZDMpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczMuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVjZWl2ZUJhZGdlXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZ2l2ZUJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBiYWRnZS5sZXZlbCArIFwiOiAqXCIgKyBiYWRnZS5uYW1lICsgXCIqXCIpe1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAxO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiArIDI7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKiBcIiArIGJhZGdlLmxldmVsICsgXCJcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV1cclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczIuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZUluaXRCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCApe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHJlbW92ZUJhZGdlc1doZW5Jbml0TGV2ZWxIaWdoZXIoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgbGV2ZWw6IG51bWJlcil7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIG91dHN0YW5kaW5nXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiA9PSBudWxsKXtcclxuXHRcdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHJcblx0XHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBsZXZlbCkge1xyXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHJlZmVyZW5jZSArIDEpLCAuLi5saW5lcy5zbGljZShyZWZlcmVuY2UyKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgY3JlYXRlQ2hhcnQodmF1bHQ6IFZhdWx0KTogUHJvbWlzZTxzdHJpbmc+e1xyXG5cdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBlYXJsaWVzdEZpbGUgPSBmaW5kRWFybGllc3RNb2RpZmllZEZpbGUoZmlsZXMpXHJcblx0XHQvL2xldCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZVxyXG5cdFx0Ly9pZiAoZWFybGllc3RGaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZSApe1xyXG5cdFx0Y29uc3QgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQubXRpbWVcclxuXHRcdC8vfVxyXG5cclxuXHRcdGxldCBtb250aENvdW50ZXIgPSAwIC8vZm9ybWF0KG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksICdNTScpO1xyXG5cdFx0bGV0IGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0Ly9jb25zdCBmaWxlRGF0ZU1vbnRoTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IGZpbGVEYXRlTW9udGhNYXBNb2QgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgbW9udGhjb3VudCA9IG1vbnRoc0JldHdlZW4obmV3IERhdGUoZWFybGllc3REYXRlKSwgbmV3IERhdGUoKSlcclxuXHRcdGxldCBkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdGxldCB5TGFiZWwgPSBcIlwiXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgY3JlYXRlZFxyXG5cdFx0Lyp3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9Ki9cclxuXHJcblx0XHRtb250aENvdW50ZXIgPSAwXHJcblx0XHRkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIG1vZGlmaWVkXHJcblx0XHR3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0eUxhYmVsID0geUxhYmVsICsgZGF0ZVN0cmluZyArIFwiLCBcIlxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH1cclxuXHRcdHlMYWJlbCA9IHlMYWJlbC5zbGljZSgwLHlMYWJlbC5sZW5ndGgtMilcclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHQvKmNvbnN0IGNyZWF0aW9uRGF0ZXMgPSBnZXRDcmVhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjcmVhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH0qL1xyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IG1vZCBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHRjb25zdCBtb2RpZmljYXRpb25EYXRlcyA9IGdldE1vZGlmaWNhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtb2RpZmljYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIGNyZWF0ZWRcclxuXHRcdC8qbGV0IGNoYXJTdHJpbmdDcmVhdGVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXApIHtcclxuXHRcdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkLnNsaWNlKDAsY2hhclN0cmluZ0NyZWF0ZWQubGVuZ3RoLTIpKi9cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgbW9kaWZpZWRcclxuXHRcdGxldCBjaGFyU3RyaW5nTW9kaWZpZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcE1vZCkge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBrZXk6ICR7a2V5fSwgdmFsdWU6ICR7dmFsdWV9YCk7XHJcblx0XHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQuc2xpY2UoMCxjaGFyU3RyaW5nTW9kaWZpZWQubGVuZ3RoLTIpXHJcblxyXG5cdFx0cmV0dXJuIGNyZWF0ZUNoYXJ0Rm9ybWF0KHlMYWJlbCwgY2hhclN0cmluZ01vZGlmaWVkLCB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBkZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWw6IFByb21pc2U8Ym9vbGVhbj4pe1xyXG5cdFx0bmV3TGV2ZWwudGhlbigocmVzdWx0OiBib29sZWFuKT0+IHtcclxuXHRcdFx0aWYocmVzdWx0KXtcclxuXHRcdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbCh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsLCBmYWxzZSlcclxuXHRcdFx0XHRuZXcgTm90aWNlKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coYGJhZGdlIGZvciBsZXZlbCAke3RoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWx9IGlzICR7YmFkZ2UubmFtZX0gLSAke2JhZGdlLmxldmVsfWApXHJcblx0XHRcdFx0dGhpcy5naXZlQmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgYmFkZ2UpXHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gMTtcclxuXHRcdFx0XHR0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlbW92ZUtleXNGcm9tRnJvbnRtYXR0ZXIoKSB7XHJcblx0XHQvL2NvbnN0IHsgVmF1bHQsIFRGaWxlIH0gPSB3aW5kb3cuYXBwO1xyXG5cdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHBcclxuXHRcdC8vY29uc3QgdmF1bHQgPSBWYXVsdC5yZW9wZW4oKTtcclxuXHJcblx0XHQvLyBHZXQgYWxsIE1hcmtkb3duIGZpbGVzIGluIHRoZSB2YXVsdFxyXG5cdFx0Ly9jb25zdCBtYXJrZG93bkZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZmlsZUNvdW50TWFwID0gYXdhaXQgZ2V0RmlsZUNvdW50TWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Zm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlQ291bnRNYXAua2V5cygpKSB7XHJcblx0XHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0RmlsZXMoKTtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IGZpbGVzLmZpbmQoZmlsZSA9PiBmaWxlLmJhc2VuYW1lID09PSBmaWxlTmFtZSk7XHJcblx0XHRcdGlmICghZmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGVOYW1lfSBub3QgZm91bmQuYCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9jb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBuZXcgTm90aWNlKGBSZW1vdmVkIHNwZWNpZmllZCBrZXlzIGZyb20gZnJvbnRtYXR0ZXIgZnJvbSBmaWxlIFxcXCIke2ZpbGVOYW1lfVxcXCIuYCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB3aGljaExldmVsTmV4dEJhZGdlKGN1cnJlbnRMZXZlbDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+e1xyXG5cdFx0bGV0IG5leHRCYWRnZUxldmVsID0gMFxyXG5cdFx0Zm9yIChsZXQgaSA9IGN1cnJlbnRMZXZlbDsgaSA8IDExMDsgaSsrKXtcclxuXHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoaSwgdHJ1ZSlcclxuXHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRjb25zdCBtYXRjaCA9IGJhZGdlLmxldmVsLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gY3VycmVudExldmVsICYmIG5leHRCYWRnZUxldmVsID09IDAgKSB7XHJcblx0XHRcdFx0XHRuZXh0QmFkZ2VMZXZlbCA9IGxldmVsTnVtYmVyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5leHRCYWRnZUxldmVsXHJcblx0fVxyXG5cclxuXHRhc3luYyBib29zdGVyRm9ySW5pdCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cdFx0Y29uc3QgbmV4dEJhZGdlQXQgPSBhd2FpdCB0aGlzLndoaWNoTGV2ZWxOZXh0QmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbClcclxuXHRcdGNvbnN0IHN0YXR1c1BvaW50c1RvUmVhY2ggPSBzdGF0dXNQb2ludHNGb3JMZXZlbChuZXh0QmFkZ2VBdClcclxuXHRcdC8vY29uc29sZS5sb2coYHN0YXR1c1BvaW50c1RvUmVhY2ggZm9yIG5leHQgQmFkZ2U6ICR7c3RhdHVzUG9pbnRzVG9SZWFjaH1gKVxyXG5cdFx0Ly8gNTAgTm90ZXMgZnJvbSBMZXZlbCAxIHRvIDUgdG8gZ2V0IHRoZSBmaXJzdCBiYWRnZS5cclxuXHRcdC8vIDMwMCBQb2ludHMgaW4gYXZlcmFnZSBmb3IgYSBOb3RlLlxyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9IE1hdGgucm91bmQoKHN0YXR1c1BvaW50c1RvUmVhY2ggLSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cykvNTAvMzAwKTtcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gYm9vc3RlckZhY3RvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IHRydWVcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdC8vY29uc29sZS5sb2coYGJvb3N0ZXJGYWt0b3I6ICR7Ym9vc3RlckZhY3Rvcn1gKVxyXG5cdFx0cmV0dXJuIGJvb3N0ZXJGYWN0b3JcclxuXHR9XHJcblxyXG5cdGFzeW5jIG9wZW5BdmF0YXJGaWxlKCkge1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHt0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSl7XHJcblx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpPy5wYXRoIHx8ICcnO1xyXG5cdFx0XHRhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChleGlzdGluZ0ZpbGUucGF0aCwgc291cmNlUGF0aCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIkZpbGUgbm90IGZvdW5kIG9yIHVuYWJsZSB0byBvcGVuLlwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaXNTYW1lRGF5KGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3QgY3VycmVudERhdGUgPSB3aW5kb3cubW9tZW50KCk7IC8vIEdldCB0aGUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGN1cnJlbnREYXRlLmlzU2FtZShpbnB1dERhdGUsICdkYXknKTsgLy8gQ2hlY2sgaWYgdGhleSBhcmUgdGhlIHNhbWUgZGF5XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzT25lRGF5QmVmb3JlKGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3Qgb25lRGF5QmVmb3JlQ3VycmVudCA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5Jyk7IC8vIENhbGN1bGF0ZSBvbmUgZGF5IGJlZm9yZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gaW5wdXREYXRlLmlzU2FtZShvbmVEYXlCZWZvcmVDdXJyZW50LCAnZGF5Jyk7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUF2YXRhckZpbGUoYXBwOiBBcHAsIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHQvL3NldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHQvLyBEZWZpbmUgdGhlIGZpbGUgbmFtZSBhbmQgY29udGVudFxyXG5cdC8vY29uc3QgZmlsZU5hbWUgPSAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJzsgLy8gdGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZTtcclxuXHQvL2NvbnNvbGUubG9nKGBmaWxlTmFtZTogJHtmaWxlTmFtZX1gKVxyXG5cclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2ZpbGVOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHtmaWxlTmFtZX0ubWQgYWxyZWFkeSBleGlzdHNgKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblx0Ly8gQ3JlYXRlIHRoZSBmaWxlIGluIHRoZSByb290IG9mIHRoZSB2YXVsdFxyXG5cdGF3YWl0IGFwcC52YXVsdC5jcmVhdGUoYCR7ZmlsZU5hbWV9Lm1kYCwgYXZhdGFySW5pdENvbnRlbnQpO1xyXG5cclxufVxyXG5cclxuXHJcbmNsYXNzIE1vZGFsSW5mb3JtYXRpb25ib3ggZXh0ZW5kcyBNb2RhbCB7XHJcblx0cHJpdmF0ZSByZWFkb25seSBkaXNwbGF5VGV4dDogc3RyaW5nOyAvLyBTdG9yZSB0aGUgdGV4dCB0byBiZSBkaXNwbGF5ZWRcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIGRpc3BsYXlUZXh0OiBzdHJpbmcpIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0XHR0aGlzLmRpc3BsYXlUZXh0ID0gZGlzcGxheVRleHQ7IC8vIFN0b3JlIHRoZSBwYXNzZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25PcGVuKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuc2V0VGV4dCh0aGlzLmRpc3BsYXlUZXh0KTsgLy8gVXNlIHRoZSBzdG9yZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25DbG9zZSgpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUZvcm1hdFN0cmluZ3MobGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKSB7XHJcblx0Y29uc3QgYWN0aXZlVmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XHJcblxyXG5cdGlmICghYWN0aXZlVmlldykge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIGFjdGl2ZSBNYXJrZG93biB2aWV3IGZvdW5kLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGNvbnN0IGVkaXRvciA9IGFjdGl2ZVZpZXcuZWRpdG9yO1xyXG5cdGNvbnN0IHNlbGVjdGVkVGV4dCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHJcblx0aWYgKCFzZWxlY3RlZFRleHQpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyB0ZXh0IHNlbGVjdGVkIChmb3IgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzd2l0Y2ggTGF5ZXIgMiAmIDMpLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGxldCByZXBsYWNlZFRleHQgPSBzZWxlY3RlZFRleHQucmVwbGFjZUFsbChsYXllcjIsIFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIpO1xyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKGxheWVyMywgXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiLCBsYXllcjIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIiwgbGF5ZXIzKVxyXG5cclxuXHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihyZXBsYWNlZFRleHQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGxldCByYXRpbmdGYWt0b3I6IG51bWJlclxyXG5cdGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gcmF0aW5nTmV3IC0gcGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZ0Zha3RvciA9IDBcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdGYWt0b3JcclxufVxyXG5cclxuXHJcblxyXG4gIFxyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuIiwgImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCBnYW1pZmljYXRpb24gZnJvbSAnLi9tYWluJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogUGFydGlhbDxJU2V0dGluZ3M+ID0ge1xuICBlbmFibGVJbml0Q29tbWFuZDogdHJ1ZSxcbiAgYmluZEVudGVyOiB0cnVlLFxuICBiaW5kVGFiOiB0cnVlLFxuICBhdmF0YXJQYWdlTmFtZTogJ0F2YXRhciAtIEdhbWlmaWNhdGlvbicsXG4gIHRhZ3NFeGNsdWRlOiAnJyxcbiAgZm9sZGVyRXhjbHVkZTogJ0V4Y2FsaWRyYXcnLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogJz09JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6ICcqKicsXG4gIG51bUFsbEZpbGVzOiAxLFxuICBudW1BbGxGaWxlc0NvdW50OiAwLFxuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiAwLFxuICBzdGF0dXNQb2ludHM6IDAsXG4gIHN0YXR1c0xldmVsOiAxLFxuICB4cEZvck5leHRMZXZlbDogMTAwMCxcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiAnMTIuMDguMjAyMycsXG4gIGJhZGdlQm9vc3RlclN0YXRlOiBmYWxzZSxcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiAxLFxuICBkZWJ1ZzogZmFsc2UsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgc3RyZWFrYm9vc3RlcjogMCxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG59XG5cblxuZXhwb3J0IGNsYXNzIEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBnYW1pZmljYXRpb247XG4gIFxuICBwdWJsaWMgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kVGFiOiBib29sZWFuO1xuICBwdWJsaWMgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgcHVibGljIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIHB1YmxpYyBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIHB1YmxpYyBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHB1YmxpYyB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgcHVibGljIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBwdWJsaWMgZGVidWc6IGJvb2xlYW47XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUNqQjtBQTZCTyxJQUFNLDZCQUFOLGNBQXlDLGlDQUFpQjtBQUFBLEVB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QUFRLE9BQU8sSUFBSSxZQUFZLElBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsS0FBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLElBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsS0FBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNqRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxJQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLEtBQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDbkQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN0RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFDekQ7QUFFTyxTQUFTLGtCQUFrQixRQUEyQjtBQUMzRCxNQUFJLFFBQW1CLFVBQVUsQ0FBQztBQUNsQyxhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLFVBQVUsS0FBSyxRQUFRO0FBQ3pCLGNBQVE7QUFBQSxJQUNWLE9BQU87QUFDTDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBRU8sU0FBUyxxQkFBcUIsYUFBNkI7QUFDaEUsTUFBSSxlQUFlO0FBQ25CLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksZUFBZSxLQUFLLFNBQVMsZ0JBQWdCLEdBQUc7QUFDbEQscUJBQWUsS0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUdGLFNBQU87QUFDUDs7O0FDOUlGLElBQU0sMEJBQW9DO0FBQUEsRUFDekM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLGtCQUE0QjtBQUFBLEVBQ2pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLHFCQUErQjtBQUFBLEVBQ3BDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEs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QUFBLEVBRUEsVUFBVTtBQUNULFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQUEsRUFDakI7QUFDRDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K diff --git a/src/main.ts b/src/main.ts index 6094713..1a84056 100644 --- a/src/main.ts +++ b/src/main.ts @@ -601,11 +601,12 @@ export default class gamification extends Plugin { async giveStatusPoints(pointsToAdd: number): Promise{ let boosterFactor = 1; + let streakbooster = this.settings.streakbooster; if (this.settings.badgeBoosterState){ boosterFactor = this.settings.badgeBoosterFactor; } - this.settings.statusPoints = pointsToAdd * boosterFactor + this.settings.statusPoints + this.settings.statusPoints = pointsToAdd * (boosterFactor + streakbooster) + this.settings.statusPoints await this.saveData(this.settings) return this.updateAvatarPage(this.settings.avatarPageName) diff --git a/src/settings.ts b/src/settings.ts index 2c2b70b..603c58e 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -24,6 +24,7 @@ export const defaultSettings: Partial = { dailyNoteCreationDate: '12.08.2023', weeklyNoteCreationTask: 0, weeklyNoteCreationDate: '12.08.2023', + streakbooster: 0, }; export interface ISettings { @@ -47,8 +48,9 @@ export interface ISettings { debug: boolean; dailyNoteCreationTask: number; dailyNoteCreationDate: string; - weeklyNoteCreationTask: number, - weeklyNoteCreationDate: string, + weeklyNoteCreationTask: number; + weeklyNoteCreationDate: string; + streakbooster: number; } @@ -77,6 +79,7 @@ export class GamificationPluginSettings extends PluginSettingTab { public dailyNoteCreationDate: string; public weeklyNoteCreationTask: number; public weeklyNoteCreationDate: string; + public streakbooster: number; constructor(app: App, plugin: gamification) { super(app, plugin); From 3b665f63ef2d7c9aa3aefba8a53852c4f1b59411 Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 21:32:29 +0200 Subject: [PATCH 02/15] functions to increate and decrease booster faktor --- main.js | 14 +++++++++++++- src/main.ts | 17 +++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/main.js b/main.js index 529aa25..2eb69ff 100644 --- a/main.js +++ b/main.js @@ -3067,6 +3067,18 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` await this.saveData(this.settings); return this.updateAvatarPage(this.settings.avatarPageName); } + async increaseStreakbooster(increaseValue) { + this.settings.streakbooster += increaseValue; + await this.saveData(this.settings); + } + async decreaseStreakbooster(decreaseValue) { + let newValue = this.settings.streakbooster -= decreaseValue; + if (newValue < 0) { + newValue = 0; + } + this.settings.streakbooster = newValue; + await this.saveData(this.settings); + } async updateAvatarPage(avatarPageName) { const existingFile = app.vault.getAbstractFileByPath(`${avatarPageName}.md`); if (existingFile == null) { @@ -3410,4 +3422,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgY3JlYXRlZC5gKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpO1xyXG5cdFx0fSBlbHNlIGlmIChpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0Ly8gZG8gbm90aGluZ1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgbm90ZSBjcmVhdGlvbiB3YXMgcmF0ZWQgYWxyZWFkeSB0b2RheS5gKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IDE7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpIHtcclxuXHRcdGxldCBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzID0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0aWYgKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPCA3KSB7XHJcblx0XHRcdGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMrKztcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXM7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblxyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24oY3VycmVudFdlZWtseUNyZWF0ZWROb3Rlcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24obmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyKSB7XHJcblx0XHRpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA8PSA2KSB7XHJcblx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9IGVsc2UgaWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPT0gNykge1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSk7XHJcblx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB1cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyOiBIVE1MU3BhbkVsZW1lbnQpe1xyXG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHModGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpXHJcblx0XHRjb25zdCBwcm9ncmVzc2JhclBlcmNlbnQgPSAodGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMFxyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9YClcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyOiBudW1iZXIsIGJhckxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRsZXQgcHJvZ3Jlc3NiYXIgPSAnJ1xyXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gY2hhck51bVByb2dyZXNzYmFyOyBpKyspIHtcclxuXHRcdFx0aWYgKGkgPD0gYmFyTGVuZ3RoKSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJz0nXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJy0nXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9ncmVzc2JhcjtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZFNldHRpbmdzKCknKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0bGV0IHN0cmVha2Jvb3N0ZXIgPSB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXI7XHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3IgPSB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyKSArIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHVwZGF0ZUF2YXRhclBhZ2UoYXZhdGFyUGFnZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgY3VycmVudCBzdGF0dXNQb2ludHM6ICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHN9YClcclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5sZXZlbEFuZFBvaW50c1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXndlZWtseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMyA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMyA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvLyByZWFkIGN1cnJlbnQgUG9pbnRzIGZyb20gc2V0dGluZ3NcclxuXHRcdGNvbnN0IG5ld1BvaW50cyA9IHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblxyXG5cdFx0Y29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhuZXdQb2ludHMpO1xyXG5cdFx0bGV0IG5leHRMZXZlbEF0ID0gdGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbDtcclxuXHRcdGxldCByZWNlaXZlQmFkZ2UgPSBmYWxzZVxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPCBsZXZlbC5sZXZlbCl7XHJcblx0XHRcdC8vIExldmVsIFVwIGFyY2hpdmVkXHJcblx0XHRcdG5ldyBOb3RpY2UoYFdpdGggJHtuZXdQb2ludHN9IHBvaW50cywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgJHtsZXZlbC5sZXZlbH0uYClcclxuXHRcdFx0Ly8gY2hlY2sgZmlyc3QgaWYgdGhpcyBtZWFucyBhIG5ldyBiYWRnZSBiZWZvcmUgaXQgZ2V0cyBvdmVyd3JpdHRlblxyXG5cdFx0XHRyZWNlaXZlQmFkZ2UgPSBjaGVja0lmUmVjZWl2ZUFCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsLCBsZXZlbC5sZXZlbClcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IGxldmVsLmxldmVsO1xyXG5cdFx0XHRuZXh0TGV2ZWxBdCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NCYXJFbmQgPSBuZXh0TGV2ZWxBdCAtIG5ld1BvaW50cztcclxuXHRcdGNvbnN0IG5ld1BvaW50c1N0cmluZyA9ICd8ICoqTGV2ZWwqKiAgfCAqKicgKyBsZXZlbC5sZXZlbCArICcqKiB8XFxufCBQb2ludHMgfCAnICsgbmV3UG9pbnRzICsgJyAgICB8XFxuXmxldmVsQW5kUG9pbnRzXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtFeHByaXJpZW5jZV1cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxcbiAgICBkYXRhOiBbJyArIG5ld1BvaW50cyArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIHByb2dyZXNzQmFyRW5kICsgJ11cXG54TWluOiAnICsgbGV2ZWwucG9pbnRzICsgJ1xcbnhNYXg6ICcgKyBsZXZlbC5wb2ludHNOZXh0ICsgJ1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCdcclxuXHRcdGNvbnN0IGRhaWx5Q2hhbGxlbmdlID0gJ3wgKipkYWlseSBOb3RlcyoqIHwgKjUwMEVQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICcvNyoqICAgfFxcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbZGF5cyBkb25lIGluIGEgcm93XVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcXG4gICAgZGF0YTogWycgKyB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gKyAnXVxcbnhNaW46IDBcXG54TWF4OiA3XFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJztcclxuXHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsICYmIHJlZmVyZW5jZTMgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHJcblxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld1BvaW50c1N0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCBkYWlseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczMgPSBbLi4ubmV3TGluZXMyLnNsaWNlKDAsIHN0YXJ0MyksIHdlZWtseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMyLnNsaWNlKGVuZDMpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczMuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVjZWl2ZUJhZGdlXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZ2l2ZUJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBiYWRnZS5sZXZlbCArIFwiOiAqXCIgKyBiYWRnZS5uYW1lICsgXCIqXCIpe1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAxO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiArIDI7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKiBcIiArIGJhZGdlLmxldmVsICsgXCJcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV1cclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczIuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZUluaXRCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCApe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHJlbW92ZUJhZGdlc1doZW5Jbml0TGV2ZWxIaWdoZXIoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgbGV2ZWw6IG51bWJlcil7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIG91dHN0YW5kaW5nXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiA9PSBudWxsKXtcclxuXHRcdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHJcblx0XHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBsZXZlbCkge1xyXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHJlZmVyZW5jZSArIDEpLCAuLi5saW5lcy5zbGljZShyZWZlcmVuY2UyKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgY3JlYXRlQ2hhcnQodmF1bHQ6IFZhdWx0KTogUHJvbWlzZTxzdHJpbmc+e1xyXG5cdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBlYXJsaWVzdEZpbGUgPSBmaW5kRWFybGllc3RNb2RpZmllZEZpbGUoZmlsZXMpXHJcblx0XHQvL2xldCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZVxyXG5cdFx0Ly9pZiAoZWFybGllc3RGaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZSApe1xyXG5cdFx0Y29uc3QgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQubXRpbWVcclxuXHRcdC8vfVxyXG5cclxuXHRcdGxldCBtb250aENvdW50ZXIgPSAwIC8vZm9ybWF0KG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksICdNTScpO1xyXG5cdFx0bGV0IGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0Ly9jb25zdCBmaWxlRGF0ZU1vbnRoTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IGZpbGVEYXRlTW9udGhNYXBNb2QgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgbW9udGhjb3VudCA9IG1vbnRoc0JldHdlZW4obmV3IERhdGUoZWFybGllc3REYXRlKSwgbmV3IERhdGUoKSlcclxuXHRcdGxldCBkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdGxldCB5TGFiZWwgPSBcIlwiXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgY3JlYXRlZFxyXG5cdFx0Lyp3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9Ki9cclxuXHJcblx0XHRtb250aENvdW50ZXIgPSAwXHJcblx0XHRkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIG1vZGlmaWVkXHJcblx0XHR3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0eUxhYmVsID0geUxhYmVsICsgZGF0ZVN0cmluZyArIFwiLCBcIlxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH1cclxuXHRcdHlMYWJlbCA9IHlMYWJlbC5zbGljZSgwLHlMYWJlbC5sZW5ndGgtMilcclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHQvKmNvbnN0IGNyZWF0aW9uRGF0ZXMgPSBnZXRDcmVhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjcmVhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH0qL1xyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IG1vZCBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHRjb25zdCBtb2RpZmljYXRpb25EYXRlcyA9IGdldE1vZGlmaWNhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtb2RpZmljYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIGNyZWF0ZWRcclxuXHRcdC8qbGV0IGNoYXJTdHJpbmdDcmVhdGVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXApIHtcclxuXHRcdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkLnNsaWNlKDAsY2hhclN0cmluZ0NyZWF0ZWQubGVuZ3RoLTIpKi9cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgbW9kaWZpZWRcclxuXHRcdGxldCBjaGFyU3RyaW5nTW9kaWZpZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcE1vZCkge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBrZXk6ICR7a2V5fSwgdmFsdWU6ICR7dmFsdWV9YCk7XHJcblx0XHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQuc2xpY2UoMCxjaGFyU3RyaW5nTW9kaWZpZWQubGVuZ3RoLTIpXHJcblxyXG5cdFx0cmV0dXJuIGNyZWF0ZUNoYXJ0Rm9ybWF0KHlMYWJlbCwgY2hhclN0cmluZ01vZGlmaWVkLCB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBkZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWw6IFByb21pc2U8Ym9vbGVhbj4pe1xyXG5cdFx0bmV3TGV2ZWwudGhlbigocmVzdWx0OiBib29sZWFuKT0+IHtcclxuXHRcdFx0aWYocmVzdWx0KXtcclxuXHRcdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbCh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsLCBmYWxzZSlcclxuXHRcdFx0XHRuZXcgTm90aWNlKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coYGJhZGdlIGZvciBsZXZlbCAke3RoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWx9IGlzICR7YmFkZ2UubmFtZX0gLSAke2JhZGdlLmxldmVsfWApXHJcblx0XHRcdFx0dGhpcy5naXZlQmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgYmFkZ2UpXHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gMTtcclxuXHRcdFx0XHR0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlbW92ZUtleXNGcm9tRnJvbnRtYXR0ZXIoKSB7XHJcblx0XHQvL2NvbnN0IHsgVmF1bHQsIFRGaWxlIH0gPSB3aW5kb3cuYXBwO1xyXG5cdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHBcclxuXHRcdC8vY29uc3QgdmF1bHQgPSBWYXVsdC5yZW9wZW4oKTtcclxuXHJcblx0XHQvLyBHZXQgYWxsIE1hcmtkb3duIGZpbGVzIGluIHRoZSB2YXVsdFxyXG5cdFx0Ly9jb25zdCBtYXJrZG93bkZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZmlsZUNvdW50TWFwID0gYXdhaXQgZ2V0RmlsZUNvdW50TWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Zm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlQ291bnRNYXAua2V5cygpKSB7XHJcblx0XHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0RmlsZXMoKTtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IGZpbGVzLmZpbmQoZmlsZSA9PiBmaWxlLmJhc2VuYW1lID09PSBmaWxlTmFtZSk7XHJcblx0XHRcdGlmICghZmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGVOYW1lfSBub3QgZm91bmQuYCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9jb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBuZXcgTm90aWNlKGBSZW1vdmVkIHNwZWNpZmllZCBrZXlzIGZyb20gZnJvbnRtYXR0ZXIgZnJvbSBmaWxlIFxcXCIke2ZpbGVOYW1lfVxcXCIuYCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB3aGljaExldmVsTmV4dEJhZGdlKGN1cnJlbnRMZXZlbDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+e1xyXG5cdFx0bGV0IG5leHRCYWRnZUxldmVsID0gMFxyXG5cdFx0Zm9yIChsZXQgaSA9IGN1cnJlbnRMZXZlbDsgaSA8IDExMDsgaSsrKXtcclxuXHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoaSwgdHJ1ZSlcclxuXHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRjb25zdCBtYXRjaCA9IGJhZGdlLmxldmVsLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gY3VycmVudExldmVsICYmIG5leHRCYWRnZUxldmVsID09IDAgKSB7XHJcblx0XHRcdFx0XHRuZXh0QmFkZ2VMZXZlbCA9IGxldmVsTnVtYmVyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5leHRCYWRnZUxldmVsXHJcblx0fVxyXG5cclxuXHRhc3luYyBib29zdGVyRm9ySW5pdCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cdFx0Y29uc3QgbmV4dEJhZGdlQXQgPSBhd2FpdCB0aGlzLndoaWNoTGV2ZWxOZXh0QmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbClcclxuXHRcdGNvbnN0IHN0YXR1c1BvaW50c1RvUmVhY2ggPSBzdGF0dXNQb2ludHNGb3JMZXZlbChuZXh0QmFkZ2VBdClcclxuXHRcdC8vY29uc29sZS5sb2coYHN0YXR1c1BvaW50c1RvUmVhY2ggZm9yIG5leHQgQmFkZ2U6ICR7c3RhdHVzUG9pbnRzVG9SZWFjaH1gKVxyXG5cdFx0Ly8gNTAgTm90ZXMgZnJvbSBMZXZlbCAxIHRvIDUgdG8gZ2V0IHRoZSBmaXJzdCBiYWRnZS5cclxuXHRcdC8vIDMwMCBQb2ludHMgaW4gYXZlcmFnZSBmb3IgYSBOb3RlLlxyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9IE1hdGgucm91bmQoKHN0YXR1c1BvaW50c1RvUmVhY2ggLSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cykvNTAvMzAwKTtcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gYm9vc3RlckZhY3RvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IHRydWVcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdC8vY29uc29sZS5sb2coYGJvb3N0ZXJGYWt0b3I6ICR7Ym9vc3RlckZhY3Rvcn1gKVxyXG5cdFx0cmV0dXJuIGJvb3N0ZXJGYWN0b3JcclxuXHR9XHJcblxyXG5cdGFzeW5jIG9wZW5BdmF0YXJGaWxlKCkge1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHt0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSl7XHJcblx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpPy5wYXRoIHx8ICcnO1xyXG5cdFx0XHRhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChleGlzdGluZ0ZpbGUucGF0aCwgc291cmNlUGF0aCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIkZpbGUgbm90IGZvdW5kIG9yIHVuYWJsZSB0byBvcGVuLlwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaXNTYW1lRGF5KGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3QgY3VycmVudERhdGUgPSB3aW5kb3cubW9tZW50KCk7IC8vIEdldCB0aGUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGN1cnJlbnREYXRlLmlzU2FtZShpbnB1dERhdGUsICdkYXknKTsgLy8gQ2hlY2sgaWYgdGhleSBhcmUgdGhlIHNhbWUgZGF5XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzT25lRGF5QmVmb3JlKGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3Qgb25lRGF5QmVmb3JlQ3VycmVudCA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5Jyk7IC8vIENhbGN1bGF0ZSBvbmUgZGF5IGJlZm9yZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gaW5wdXREYXRlLmlzU2FtZShvbmVEYXlCZWZvcmVDdXJyZW50LCAnZGF5Jyk7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUF2YXRhckZpbGUoYXBwOiBBcHAsIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHQvL3NldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHQvLyBEZWZpbmUgdGhlIGZpbGUgbmFtZSBhbmQgY29udGVudFxyXG5cdC8vY29uc3QgZmlsZU5hbWUgPSAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJzsgLy8gdGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZTtcclxuXHQvL2NvbnNvbGUubG9nKGBmaWxlTmFtZTogJHtmaWxlTmFtZX1gKVxyXG5cclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2ZpbGVOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHtmaWxlTmFtZX0ubWQgYWxyZWFkeSBleGlzdHNgKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblx0Ly8gQ3JlYXRlIHRoZSBmaWxlIGluIHRoZSByb290IG9mIHRoZSB2YXVsdFxyXG5cdGF3YWl0IGFwcC52YXVsdC5jcmVhdGUoYCR7ZmlsZU5hbWV9Lm1kYCwgYXZhdGFySW5pdENvbnRlbnQpO1xyXG5cclxufVxyXG5cclxuXHJcbmNsYXNzIE1vZGFsSW5mb3JtYXRpb25ib3ggZXh0ZW5kcyBNb2RhbCB7XHJcblx0cHJpdmF0ZSByZWFkb25seSBkaXNwbGF5VGV4dDogc3RyaW5nOyAvLyBTdG9yZSB0aGUgdGV4dCB0byBiZSBkaXNwbGF5ZWRcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIGRpc3BsYXlUZXh0OiBzdHJpbmcpIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0XHR0aGlzLmRpc3BsYXlUZXh0ID0gZGlzcGxheVRleHQ7IC8vIFN0b3JlIHRoZSBwYXNzZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25PcGVuKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuc2V0VGV4dCh0aGlzLmRpc3BsYXlUZXh0KTsgLy8gVXNlIHRoZSBzdG9yZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25DbG9zZSgpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUZvcm1hdFN0cmluZ3MobGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKSB7XHJcblx0Y29uc3QgYWN0aXZlVmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XHJcblxyXG5cdGlmICghYWN0aXZlVmlldykge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIGFjdGl2ZSBNYXJrZG93biB2aWV3IGZvdW5kLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGNvbnN0IGVkaXRvciA9IGFjdGl2ZVZpZXcuZWRpdG9yO1xyXG5cdGNvbnN0IHNlbGVjdGVkVGV4dCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHJcblx0aWYgKCFzZWxlY3RlZFRleHQpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyB0ZXh0IHNlbGVjdGVkIChmb3IgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzd2l0Y2ggTGF5ZXIgMiAmIDMpLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGxldCByZXBsYWNlZFRleHQgPSBzZWxlY3RlZFRleHQucmVwbGFjZUFsbChsYXllcjIsIFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIpO1xyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKGxheWVyMywgXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiLCBsYXllcjIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIiwgbGF5ZXIzKVxyXG5cclxuXHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihyZXBsYWNlZFRleHQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGxldCByYXRpbmdGYWt0b3I6IG51bWJlclxyXG5cdGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gcmF0aW5nTmV3IC0gcGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZ0Zha3RvciA9IDBcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdGYWt0b3JcclxufVxyXG5cclxuXHJcblxyXG4gIFxyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuIiwgImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCBnYW1pZmljYXRpb24gZnJvbSAnLi9tYWluJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogUGFydGlhbDxJU2V0dGluZ3M+ID0ge1xuICBlbmFibGVJbml0Q29tbWFuZDogdHJ1ZSxcbiAgYmluZEVudGVyOiB0cnVlLFxuICBiaW5kVGFiOiB0cnVlLFxuICBhdmF0YXJQYWdlTmFtZTogJ0F2YXRhciAtIEdhbWlmaWNhdGlvbicsXG4gIHRhZ3NFeGNsdWRlOiAnJyxcbiAgZm9sZGVyRXhjbHVkZTogJ0V4Y2FsaWRyYXcnLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogJz09JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6ICcqKicsXG4gIG51bUFsbEZpbGVzOiAxLFxuICBudW1BbGxGaWxlc0NvdW50OiAwLFxuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiAwLFxuICBzdGF0dXNQb2ludHM6IDAsXG4gIHN0YXR1c0xldmVsOiAxLFxuICB4cEZvck5leHRMZXZlbDogMTAwMCxcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiAnMTIuMDguMjAyMycsXG4gIGJhZGdlQm9vc3RlclN0YXRlOiBmYWxzZSxcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiAxLFxuICBkZWJ1ZzogZmFsc2UsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgc3RyZWFrYm9vc3RlcjogMCxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG59XG5cblxuZXhwb3J0IGNsYXNzIEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBnYW1pZmljYXRpb247XG4gIFxuICBwdWJsaWMgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kVGFiOiBib29sZWFuO1xuICBwdWJsaWMgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgcHVibGljIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIHB1YmxpYyBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIHB1YmxpYyBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHB1YmxpYyB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgcHVibGljIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBwdWJsaWMgZGVidWc6IGJvb2xlYW47XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUNqQjtBQTZCTyxJQUFNLDZCQUFOLGNBQXlDLGlDQUFpQjtBQUFBLEVB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QUFRLE9BQU8sSUFBSSxZQUFZLElBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsS0FBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLElBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsS0FBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNqRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxJQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLEtBQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDbkQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN0RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFDekQ7QUFFTyxTQUFTLGtCQUFrQixRQUEyQjtBQUMzRCxNQUFJLFFBQW1CLFVBQVUsQ0FBQztBQUNsQyxhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLFVBQVUsS0FBSyxRQUFRO0FBQ3pCLGNBQVE7QUFBQSxJQUNWLE9BQU87QUFDTDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBRU8sU0FBUyxxQkFBcUIsYUFBNkI7QUFDaEUsTUFBSSxlQUFlO0FBQ25CLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksZUFBZSxLQUFLLFNBQVMsZ0JBQWdCLEdBQUc7QUFDbEQscUJBQWUsS0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUdGLFNBQU87QUFDUDs7O0FDOUlGLElBQU0sMEJBQW9DO0FBQUEsRUFDekM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLGtCQUE0QjtBQUFBLEVBQ2pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLHFCQUErQjtBQUFBLEVBQ3BDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEs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QUFBLEVBRUEsVUFBVTtBQUNULFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQUEsRUFDakI7QUFDRDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgY3JlYXRlZC5gKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpO1xyXG5cdFx0fSBlbHNlIGlmIChpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0Ly8gZG8gbm90aGluZ1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgbm90ZSBjcmVhdGlvbiB3YXMgcmF0ZWQgYWxyZWFkeSB0b2RheS5gKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IDE7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpIHtcclxuXHRcdGxldCBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzID0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0aWYgKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPCA3KSB7XHJcblx0XHRcdGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMrKztcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXM7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblxyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24oY3VycmVudFdlZWtseUNyZWF0ZWROb3Rlcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24obmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyKSB7XHJcblx0XHRpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA8PSA2KSB7XHJcblx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9IGVsc2UgaWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPT0gNykge1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSk7XHJcblx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB1cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyOiBIVE1MU3BhbkVsZW1lbnQpe1xyXG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHModGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpXHJcblx0XHRjb25zdCBwcm9ncmVzc2JhclBlcmNlbnQgPSAodGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMFxyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9YClcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyOiBudW1iZXIsIGJhckxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRsZXQgcHJvZ3Jlc3NiYXIgPSAnJ1xyXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gY2hhck51bVByb2dyZXNzYmFyOyBpKyspIHtcclxuXHRcdFx0aWYgKGkgPD0gYmFyTGVuZ3RoKSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJz0nXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJy0nXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9ncmVzc2JhcjtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZFNldHRpbmdzKCknKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0bGV0IHN0cmVha2Jvb3N0ZXIgPSB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXI7XHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3IgPSB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyKSArIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VTdHJlYWtib29zdGVyKGluY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArPSBpbmNyZWFzZVZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZGVjcmVhc2VTdHJlYWtib29zdGVyKGRlY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdGxldCBuZXdWYWx1ZSA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtPSBkZWNyZWFzZVZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmxldmVsQW5kUG9pbnRzXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeZGFpbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UzID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UzID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIHJlYWQgY3VycmVudCBQb2ludHMgZnJvbSBzZXR0aW5nc1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzID0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHJcblx0XHRjb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKG5ld1BvaW50cyk7XHJcblx0XHRsZXQgbmV4dExldmVsQXQgPSB0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsO1xyXG5cdFx0bGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA8IGxldmVsLmxldmVsKXtcclxuXHRcdFx0Ly8gTGV2ZWwgVXAgYXJjaGl2ZWRcclxuXHRcdFx0bmV3IE5vdGljZShgV2l0aCAke25ld1BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsLmxldmVsfS5gKVxyXG5cdFx0XHQvLyBjaGVjayBmaXJzdCBpZiB0aGlzIG1lYW5zIGEgbmV3IGJhZGdlIGJlZm9yZSBpdCBnZXRzIG92ZXJ3cml0dGVuXHJcblx0XHRcdHJlY2VpdmVCYWRnZSA9IGNoZWNrSWZSZWNlaXZlQUJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGxldmVsLmxldmVsKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsID0gbGV2ZWwubGV2ZWw7XHJcblx0XHRcdG5leHRMZXZlbEF0ID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwcm9ncmVzc0JhckVuZCA9IG5leHRMZXZlbEF0IC0gbmV3UG9pbnRzO1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzU3RyaW5nID0gJ3wgKipMZXZlbCoqICB8ICoqJyArIGxldmVsLmxldmVsICsgJyoqIHxcXG58IFBvaW50cyB8ICcgKyBuZXdQb2ludHMgKyAnICAgIHxcXG5ebGV2ZWxBbmRQb2ludHNcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW0V4cHJpcmllbmNlXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXFxuICAgIGRhdGE6IFsnICsgbmV3UG9pbnRzICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgcHJvZ3Jlc3NCYXJFbmQgKyAnXVxcbnhNaW46ICcgKyBsZXZlbC5wb2ludHMgKyAnXFxueE1heDogJyArIGxldmVsLnBvaW50c05leHQgKyAnXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJ1xyXG5cdFx0Y29uc3QgZGFpbHlDaGFsbGVuZ2UgPSAnfCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKionICsgdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgKyAnLzIqKiAgIHwnO1xyXG5cdFx0Y29uc3QgZGF5c0xlZnRJbldlZWtseUNoYWluIDogbnVtYmVyID0gNyAtIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGNvbnN0IHdlZWtseUNoYWxsZW5nZSA9ICd8ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsKXtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAyO1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyNDtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQzID0gcmVmZXJlbmNlMyArIDI0IC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZWNlaXZlQmFkZ2VcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBnaXZlQmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IGJhZGdlLmxldmVsICsgXCI6ICpcIiArIGJhZGdlLm5hbWUgKyBcIipcIil7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDE7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyICsgMjtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqIFwiICsgYmFkZ2UubGV2ZWwgKyBcIlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXVxyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMi5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlSW5pdEJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKipcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgcmVtb3ZlQmFkZ2VzV2hlbkluaXRMZXZlbEhpZ2hlcihhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBsZXZlbDogbnVtYmVyKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgb3V0c3RhbmRpbmdcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyID09IG51bGwpe1xyXG5cdFx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cclxuXHRcdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGxldmVsKSB7XHJcblx0XHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgcmVmZXJlbmNlICsgMSksIC4uLmxpbmVzLnNsaWNlKHJlZmVyZW5jZTIpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBjcmVhdGVDaGFydCh2YXVsdDogVmF1bHQpOiBQcm9taXNlPHN0cmluZz57XHJcblx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RmlsZSA9IGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlcylcclxuXHRcdC8vbGV0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lXHJcblx0XHQvL2lmIChlYXJsaWVzdEZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lICl7XHJcblx0XHRjb25zdCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5tdGltZVxyXG5cdFx0Ly99XHJcblxyXG5cdFx0bGV0IG1vbnRoQ291bnRlciA9IDAgLy9mb3JtYXQobmV3IERhdGUoZWFybGllc3REYXRlKSwgJ01NJyk7XHJcblx0XHRsZXQgZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHQvL2NvbnN0IGZpbGVEYXRlTW9udGhNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgZmlsZURhdGVNb250aE1hcE1vZCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBtb250aGNvdW50ID0gbW9udGhzQmV0d2VlbihuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCBuZXcgRGF0ZSgpKVxyXG5cdFx0bGV0IGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0bGV0IHlMYWJlbCA9IFwiXCJcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBjcmVhdGVkXHJcblx0XHQvKndoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH0qL1xyXG5cclxuXHRcdG1vbnRoQ291bnRlciA9IDBcclxuXHRcdGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgbW9kaWZpZWRcclxuXHRcdHdoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHR5TGFiZWwgPSB5TGFiZWwgKyBkYXRlU3RyaW5nICsgXCIsIFwiXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fVxyXG5cdFx0eUxhYmVsID0geUxhYmVsLnNsaWNlKDAseUxhYmVsLmxlbmd0aC0yKVxyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdC8qY29uc3QgY3JlYXRpb25EYXRlcyA9IGdldENyZWF0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNyZWF0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fSovXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgbW9kIGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdGNvbnN0IG1vZGlmaWNhdGlvbkRhdGVzID0gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgY3JlYXRlZFxyXG5cdFx0LypsZXQgY2hhclN0cmluZ0NyZWF0ZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcCkge1xyXG5cdFx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQuc2xpY2UoMCxjaGFyU3RyaW5nQ3JlYXRlZC5sZW5ndGgtMikqL1xyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBtb2RpZmllZFxyXG5cdFx0bGV0IGNoYXJTdHJpbmdNb2RpZmllZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwTW9kKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGtleTogJHtrZXl9LCB2YWx1ZTogJHt2YWx1ZX1gKTtcclxuXHRcdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZC5zbGljZSgwLGNoYXJTdHJpbmdNb2RpZmllZC5sZW5ndGgtMilcclxuXHJcblx0XHRyZXR1cm4gY3JlYXRlQ2hhcnRGb3JtYXQoeUxhYmVsLCBjaGFyU3RyaW5nTW9kaWZpZWQsIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbDogUHJvbWlzZTxib29sZWFuPil7XHJcblx0XHRuZXdMZXZlbC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pPT4ge1xyXG5cdFx0XHRpZihyZXN1bHQpe1xyXG5cdFx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGZhbHNlKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhgYmFkZ2UgZm9yIGxldmVsICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gaXMgJHtiYWRnZS5uYW1lfSAtICR7YmFkZ2UubGV2ZWx9YClcclxuXHRcdFx0XHR0aGlzLmdpdmVCYWRnZUluUHJvZmlsZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBiYWRnZSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0XHRcdHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVtb3ZlS2V5c0Zyb21Gcm9udG1hdHRlcigpIHtcclxuXHRcdC8vY29uc3QgeyBWYXVsdCwgVEZpbGUgfSA9IHdpbmRvdy5hcHA7XHJcblx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcFxyXG5cdFx0Ly9jb25zdCB2YXVsdCA9IFZhdWx0LnJlb3BlbigpO1xyXG5cclxuXHRcdC8vIEdldCBhbGwgTWFya2Rvd24gZmlsZXMgaW4gdGhlIHZhdWx0XHJcblx0XHQvL2NvbnN0IG1hcmtkb3duRmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXAgPSBhd2FpdCBnZXRGaWxlQ291bnRNYXAodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MudGFnc0V4Y2x1ZGUsIHRoaXMuc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSk7XHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcC5rZXlzKCkpIHtcclxuXHRcdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRGaWxlcygpO1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZXMuZmluZChmaWxlID0+IGZpbGUuYmFzZW5hbWUgPT09IGZpbGVOYW1lKTtcclxuXHRcdFx0aWYgKCFmaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGBGaWxlICR7ZmlsZU5hbWV9IG5vdCBmb3VuZC5gKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL2NvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWV9YCk7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIG5ldyBOb3RpY2UoYFJlbW92ZWQgc3BlY2lmaWVkIGtleXMgZnJvbSBmcm9udG1hdHRlciBmcm9tIGZpbGUgXFxcIiR7ZmlsZU5hbWV9XFxcIi5gKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHdoaWNoTGV2ZWxOZXh0QmFkZ2UoY3VycmVudExldmVsOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj57XHJcblx0XHRsZXQgbmV4dEJhZGdlTGV2ZWwgPSAwXHJcblx0XHRmb3IgKGxldCBpID0gY3VycmVudExldmVsOyBpIDwgMTEwOyBpKyspe1xyXG5cdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChpLCB0cnVlKVxyXG5cdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdGNvbnN0IG1hdGNoID0gYmFkZ2UubGV2ZWwubWF0Y2gobGV2ZWxSZWdleCk7XHJcblx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBjdXJyZW50TGV2ZWwgJiYgbmV4dEJhZGdlTGV2ZWwgPT0gMCApIHtcclxuXHRcdFx0XHRcdG5leHRCYWRnZUxldmVsID0gbGV2ZWxOdW1iZXI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV4dEJhZGdlTGV2ZWxcclxuXHR9XHJcblxyXG5cdGFzeW5jIGJvb3N0ZXJGb3JJbml0KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcblx0XHRjb25zdCBuZXh0QmFkZ2VBdCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0Y29uc3Qgc3RhdHVzUG9pbnRzVG9SZWFjaCA9IHN0YXR1c1BvaW50c0ZvckxldmVsKG5leHRCYWRnZUF0KVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgc3RhdHVzUG9pbnRzVG9SZWFjaCBmb3IgbmV4dCBCYWRnZTogJHtzdGF0dXNQb2ludHNUb1JlYWNofWApXHJcblx0XHQvLyA1MCBOb3RlcyBmcm9tIExldmVsIDEgdG8gNSB0byBnZXQgdGhlIGZpcnN0IGJhZGdlLlxyXG5cdFx0Ly8gMzAwIFBvaW50cyBpbiBhdmVyYWdlIGZvciBhIE5vdGUuXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gTWF0aC5yb3VuZCgoc3RhdHVzUG9pbnRzVG9SZWFjaCAtIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKS81MC8zMDApO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSBib29zdGVyRmFjdG9yXHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gdHJ1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgYm9vc3RlckZha3RvcjogJHtib29zdGVyRmFjdG9yfWApXHJcblx0XHRyZXR1cm4gYm9vc3RlckZhY3RvclxyXG5cdH1cclxuXHJcblx0YXN5bmMgb3BlbkF2YXRhckZpbGUoKSB7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlKXtcclxuXHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk/LnBhdGggfHwgJyc7XHJcblx0XHRcdGF3YWl0IGFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGV4aXN0aW5nRmlsZS5wYXRoLCBzb3VyY2VQYXRoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwiRmlsZSBub3QgZm91bmQgb3IgdW5hYmxlIHRvIG9wZW4uXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpc1NhbWVEYXkoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBjdXJyZW50RGF0ZSA9IHdpbmRvdy5tb21lbnQoKTsgLy8gR2V0IHRoZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gY3VycmVudERhdGUuaXNTYW1lKGlucHV0RGF0ZSwgJ2RheScpOyAvLyBDaGVjayBpZiB0aGV5IGFyZSB0aGUgc2FtZSBkYXlcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPbmVEYXlCZWZvcmUoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBvbmVEYXlCZWZvcmVDdXJyZW50ID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKTsgLy8gQ2FsY3VsYXRlIG9uZSBkYXkgYmVmb3JlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBpbnB1dERhdGUuaXNTYW1lKG9uZURheUJlZm9yZUN1cnJlbnQsICdkYXknKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXZhdGFyRmlsZShhcHA6IEFwcCwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG5cdC8vc2V0dGluZ3M6IEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzO1xyXG5cdC8vIERlZmluZSB0aGUgZmlsZSBuYW1lIGFuZCBjb250ZW50XHJcblx0Ly9jb25zdCBmaWxlTmFtZSA9ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nOyAvLyB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lO1xyXG5cdC8vY29uc29sZS5sb2coYGZpbGVOYW1lOiAke2ZpbGVOYW1lfWApXHJcblxyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7ZmlsZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2ZpbGVOYW1lfS5tZCBhbHJlYWR5IGV4aXN0c2ApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHQvLyBDcmVhdGUgdGhlIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHZhdWx0XHJcblx0YXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShgJHtmaWxlTmFtZX0ubWRgLCBhdmF0YXJJbml0Q29udGVudCk7XHJcblxyXG59XHJcblxyXG5cclxuY2xhc3MgTW9kYWxJbmZvcm1hdGlvbmJveCBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmc7IC8vIFN0b3JlIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZGlzcGxheVRleHQ6IHN0cmluZykge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dDsgLy8gU3RvcmUgdGhlIHBhc3NlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5zZXRUZXh0KHRoaXMuZGlzcGxheVRleHQpOyAvLyBVc2UgdGhlIHN0b3JlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlRm9ybWF0U3RyaW5ncyhsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpIHtcclxuXHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHJcblx0aWYgKCFhY3RpdmVWaWV3KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gYWN0aXZlIE1hcmtkb3duIHZpZXcgZm91bmQuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgZWRpdG9yID0gYWN0aXZlVmlldy5lZGl0b3I7XHJcblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cclxuXHRpZiAoIXNlbGVjdGVkVGV4dCkge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIHRleHQgc2VsZWN0ZWQgKGZvciBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIHN3aXRjaCBMYXllciAyICYgMykuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0bGV0IHJlcGxhY2VkVGV4dCA9IHNlbGVjdGVkVGV4dC5yZXBsYWNlQWxsKGxheWVyMiwgXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIik7XHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIzLCBcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIsIGxheWVyMilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiLCBsYXllcjMpXHJcblxyXG5cdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHJlcGxhY2VkVGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IG51bWJlciB7XHJcblx0bGV0IHJhdGluZ0Zha3RvcjogbnVtYmVyXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSByYXRpbmdOZXcgLSBwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMClcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gMFxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ0Zha3RvclxyXG59XHJcblxyXG5cclxuXHJcbiAgXHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4iLCAiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IGdhbWlmaWNhdGlvbiBmcm9tICcuL21haW4nO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBQYXJ0aWFsPElTZXR0aW5ncz4gPSB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiB0cnVlLFxuICBiaW5kRW50ZXI6IHRydWUsXG4gIGJpbmRUYWI6IHRydWUsXG4gIGF2YXRhclBhZ2VOYW1lOiAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJyxcbiAgdGFnc0V4Y2x1ZGU6ICcnLFxuICBmb2xkZXJFeGNsdWRlOiAnRXhjYWxpZHJhdycsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiAnPT0nLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogJyoqJyxcbiAgbnVtQWxsRmlsZXM6IDEsXG4gIG51bUFsbEZpbGVzQ291bnQ6IDAsXG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IDAsXG4gIHN0YXR1c1BvaW50czogMCxcbiAgc3RhdHVzTGV2ZWw6IDEsXG4gIHhwRm9yTmV4dExldmVsOiAxMDAwLFxuICBnYW1pZmljYXRpb25TdGFydERhdGU6ICcxMi4wOC4yMDIzJyxcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGZhbHNlLFxuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IDEsXG4gIGRlYnVnOiBmYWxzZSxcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICBzdHJlYWtib29zdGVyOiAwLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2V0dGluZ3Mge1xuICBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgYmluZEVudGVyOiBib29sZWFuO1xuICBiaW5kVGFiOiBib29sZWFuO1xuICBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbn1cblxuXG5leHBvcnQgY2xhc3MgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcblx0cHJpdmF0ZSByZWFkb25seSBwbHVnaW46IGdhbWlmaWNhdGlvbjtcbiAgXG4gIHB1YmxpYyBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRUYWI6IGJvb2xlYW47XG4gIHB1YmxpYyBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBwdWJsaWMgbnVtQWxsRmlsZXM6IG51bWJlcjtcbiAgcHVibGljIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgcHVibGljIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c1BvaW50czogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIHB1YmxpYyBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcbiAgcHVibGljIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIHB1YmxpYyBkZWJ1ZzogYm9vbGVhbjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBzdHJlYWtib29zdGVyOiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogZ2FtaWZpY2F0aW9uKSB7XG5cdCAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuXHQgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHR9XG4gIFxuXHRwdWJsaWMgZGlzcGxheSgpOiB2b2lkIHtcblx0XHRjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXHRcdGNvbnRhaW5lckVsLmFkZENsYXNzKFwiZXhjYWxpZHJhdy1zZXR0aW5nc1wiKTtcblx0XHR0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG5cblx0XHRjb25zdCBjb2ZmZWVEaXYgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoXCJjb2ZmZWVcIik7XG5cdFx0Y29mZmVlRGl2LmFkZENsYXNzKFwiZXgtY29mZmVlLWRpdlwiKTtcblx0XHRjb25zdCBjb2ZmZWVMaW5rID0gY29mZmVlRGl2LmNyZWF0ZUVsKFwiYVwiLCB7XG5cdFx0aHJlZjogXCJodHRwczovL2tvLWZpLmNvbS9hbmRyZWFzdHJlYmluZ1wiLFxuXHRcdH0pO1xuXHRcdGNvbnN0IGNvZmZlZUltZyA9IGNvZmZlZUxpbmsuY3JlYXRlRWwoXCJpbWdcIiwge1xuXHRcdGF0dHI6IHtcblx0XHRcdHNyYzogXCJodHRwczovL2Nkbi5rby1maS5jb20vY2RuL2tvZmkzLnBuZz92PTNcIixcblx0XHR9LFxuXHRcdH0pO1xuXHRcdGNvZmZlZUltZy5oZWlnaHQgPSA0NTtcblxuXHRcdC8vY29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHQvL2NvbnRhaW5lckVsLmVtcHR5KCk7XG4gIFxuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ0dhbWlmeSB5b3VyIFBLTSAtIFNldHRpbmdzJyB9KTtcblx0XHRjb25zb2xlLmxvZygnc2V0dGluZ3MgY2FsbGVkJylcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCcjdGFncyB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIHRhZ3Mgd2l0aG91dCAjIGFuZCBzZXBhcmF0ZSB3aXRoIFwiLCBcIi5cXG5JbmNsdWRlIG5lc3RlZCB0YWdzLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdFbnRlciB5b3VyIHRhZzEsIHRhZzIvc3VidGFnLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cblx0XHRcdFx0XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnZm9sZGVyIHRvIGlnbm9yZScpXG5cdFx0XHQuc2V0RGVzYygnZW50ZXIgZm9sZGVyIHdoaWNocyBjb250ZW50IHNoYWxsIGJlIGlnbm9yZWQuIFNlcGFyYXRlIHdpdGggXCIsIFwiLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdFbnRlciB5b3VyIGZvbGRlcjEsIGZvbGRlcjIsIFx1MjAyNicpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnUHJvZmlsZSBQYWdlIE5hbWUnKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIGhlcmUgdGhlIG5hbWUgb2YgeW91ciBwcm9maWxlIHBhZ2UgaWYgeW91IGxpa2UuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignbmFtZScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdPdGhlciBTZXR0aW5ncycgfSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnRGlzYWJsZSBJbml0IENvbW1hbmQnKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gcmVtb3ZlIHRoZSBpbml0IGNvbW1hbmQgZnJvbSBjb21tYW5kIHByb21wdCBieSBzd2l0Y2hpbmcgb2ZmLlxcbnJlc3RhcnQgbmVlZGVkLicpXG5cdFx0XHQuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IFxuXHRcdFx0XHR0b2dnbGVcbiAgICAgICAgICBcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kKVxuICAgICAgICBcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZCA9IHZhbHVlO1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuICAgICAgICAgIFx0XHRcdH0pLFxuXHRcdFx0KTtcblxuXHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2xpbWl0IHRoZSB2aXNpYmxlIG1vbnRoIGluIHRoZSBjaGFydCBvbiB5b3VyIGF2YXRhciBwYWdlOiAnICsgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXG5cdFx0XHQuc2V0RGVzYygnaWYgMCwgYWxsIG1vbnRoIHdpbGwgYmUgc2hvd24uIEVudGVyIGEgbnVtYmVyIGhvdyBtYW55IG1vbnRoIHNoYWxsIGJlIHNob3duLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ051bWJlciBvZiBNb250aCB0byBzaG93Jylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZS50b1N0cmluZygpKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPSBwYXJzZUludCh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG4gIFxuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnUHJvZ3Jlc3NpdmUgU3VtbWFyaXphdGlvbicpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2Ugd2hpY2ggZm9ybWF0dGluZyB5b3UgdXNlIGZvciBMYXllciAyIGFuZCAzLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0xheWVyIDIgaXMgdXN1YWxseSAqKicpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0xheWVyIDMgaXMgdXN1YWxseSA9PScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdH0pKTtcblxuXHR9XG4gIH0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWlyZWRBcmdzKHJlcXVpcmVkLCBhcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA8IHJlcXVpcmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihyZXF1aXJlZCArICcgYXJndW1lbnQnICsgKHJlcXVpcmVkID4gMSA/ICdzJyA6ICcnKSArICcgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmdzLmxlbmd0aCArICcgcHJlc2VudCcpO1xuICB9XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBkYXRlP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLiBUaGUgZnVuY3Rpb24gd29ya3MgZm9yIGRhdGVzIHRyYW5zZmVycmVkIGFjcm9zcyBpZnJhbWVzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRhdGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGEgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZSgpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoTmFOKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3Igc29tZSB2YWx1ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSgnMjAxNC0wMi0zMScpXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBvYmplY3Q6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoe30pXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCBfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGFyZ1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCk7XG5cbiAgLy8gQ2xvbmUgdGhlIGRhdGVcbiAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgRGF0ZSB8fCBfdHlwZW9mKGFyZ3VtZW50KSA9PT0gJ29iamVjdCcgJiYgYXJnU3RyID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdudW1iZXInIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgTnVtYmVyXScpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IFN0cmluZ10nKSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXCJTdGFydGluZyB3aXRoIHYyLjAuMC1iZXRhLjEgZGF0ZS1mbnMgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyBhcyBkYXRlIGFyZ3VtZW50cy4gUGxlYXNlIHVzZSBgcGFyc2VJU09gIHRvIHBhcnNlIHN0cmluZ3MuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI3N0cmluZy1hcmd1bWVudHNcIik7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cbn0iLCAiaW1wb3J0IGlzRGF0ZSBmcm9tIFwiLi4vaXNEYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzVmFsaWRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdmFsaWQ/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGZhbHNlIGlmIGFyZ3VtZW50IGlzIEludmFsaWQgRGF0ZSBhbmQgdHJ1ZSBvdGhlcndpc2UuXG4gKiBBcmd1bWVudCBpcyBjb252ZXJ0ZWQgdG8gRGF0ZSB1c2luZyBgdG9EYXRlYC4gU2VlIFt0b0RhdGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlfVxuICogSW52YWxpZCBEYXRlIGlzIGEgRGF0ZSwgd2hvc2UgdGltZSB2YWx1ZSBpcyBOYU4uXG4gKlxuICogVGltZSB2YWx1ZSBvZiBEYXRlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjkuMS4xXG4gKlxuICogQHBhcmFtIHsqfSBkYXRlIC0gdGhlIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZSBpcyB2YWxpZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoMjAxNCwgMSwgMzEpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsdWUsIGNvbnZlcnRhYmxlIGludG8gYSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZCgxMzkzODA0ODAwMDAwKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgnJykpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVmFsaWQoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICBpZiAoIWlzRGF0ZShkaXJ0eURhdGUpICYmIHR5cGVvZiBkaXJ0eURhdGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHJldHVybiAhaXNOYU4oTnVtYmVyKGRhdGUpKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn0iLCAiaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgYWRkTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZE1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjMwLjc1MFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufSIsICJpbXBvcnQgYWRkTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9hZGRNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdWJNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgc3VidHJhY3RlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA3NTAgbWlsbGlzZWNvbmRzIGZyb20gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1Yk1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjI5LjI1MFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCAtYW1vdW50KTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fREFZID0gODY0MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENEYXlPZlllYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mWWVhclRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICB2YXIgZGlmZmVyZW5jZSA9IHRpbWVzdGFtcCAtIHN0YXJ0T2ZZZWFyVGltZXN0YW1wO1xuICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gTUlMTElTRUNPTkRTX0lOX0RBWSkgKyAxO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gMTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENGdWxsWWVhcih5ZWFyICsgMSwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHllYXIgPSBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5ID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDSVNPV2VlayhkYXRlKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGF0ZSkuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJ2YXIgZGVmYXVsdE9wdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXdPcHRpb25zO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGZpcnN0V2Vla09mTmV4dFllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENGdWxsWWVhcih5ZWFyICsgMSwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mTmV4dFllYXIsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZlRoaXNZZWFyLCBvcHRpb25zKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcbiAgdmFyIHllYXIgPSBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vlay5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWsuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrLCBvcHRpb25zKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENXZWVrKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIsIHRhcmdldExlbmd0aCkge1xuICB2YXIgc2lnbiA9IG51bWJlciA8IDAgPyAnLScgOiAnJztcbiAgdmFyIG91dHB1dCA9IE1hdGguYWJzKG51bWJlcikudG9TdHJpbmcoKTtcbiAgd2hpbGUgKG91dHB1dC5sZW5ndGggPCB0YXJnZXRMZW5ndGgpIHtcbiAgICBvdXRwdXQgPSAnMCcgKyBvdXRwdXQ7XG4gIH1cbiAgcmV0dXJuIHNpZ24gKyBvdXRwdXQ7XG59IiwgImltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKi9cbnZhciBmb3JtYXR0ZXJzID0ge1xuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4pIHtcbiAgICAvLyBGcm9tIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtMzEvdHIzNS1kYXRlcy5odG1sI0RhdGVfRm9ybWF0X3Rva2Vuc1xuICAgIC8vIHwgWWVhciAgICAgfCAgICAgeSB8IHl5IHwgICB5eXkgfCAgeXl5eSB8IHl5eXl5IHxcbiAgICAvLyB8LS0tLS0tLS0tLXwtLS0tLS0tfC0tLS18LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS18XG4gICAgLy8gfCBBRCAxICAgICB8ICAgICAxIHwgMDEgfCAgIDAwMSB8ICAwMDAxIHwgMDAwMDEgfFxuICAgIC8vIHwgQUQgMTIgICAgfCAgICAxMiB8IDEyIHwgICAwMTIgfCAgMDAxMiB8IDAwMDEyIHxcbiAgICAvLyB8IEFEIDEyMyAgIHwgICAxMjMgfCAyMyB8ICAgMTIzIHwgIDAxMjMgfCAwMDEyMyB8XG4gICAgLy8gfCBBRCAxMjM0ICB8ICAxMjM0IHwgMzQgfCAgMTIzNCB8ICAxMjM0IHwgMDEyMzQgfFxuICAgIC8vIHwgQUQgMTIzNDUgfCAxMjM0NSB8IDQ1IHwgMTIzNDUgfCAxMjM0NSB8IDEyMzQ1IHxcblxuICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRva2VuID09PSAneXknID8geWVhciAlIDEwMCA6IHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSAnTScgPyBTdHJpbmcobW9udGggKyAxKSA6IGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDRGF0ZSgpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0VVRDSG91cnMoKSAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTtcbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gJ2FtJyA/ICdhLm0uJyA6ICdwLm0uJztcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ01pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHZhciBudW1iZXJPZkRpZ2l0cyA9IHRva2VuLmxlbmd0aDtcbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgICB2YXIgZnJhY3Rpb25hbFNlY29uZHMgPSBNYXRoLmZsb29yKG1pbGxpc2Vjb25kcyAqIE1hdGgucG93KDEwLCBudW1iZXJPZkRpZ2l0cyAtIDMpKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGZyYWN0aW9uYWxTZWNvbmRzLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAiaW1wb3J0IGdldFVUQ0RheU9mWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENEYXlPZlllYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENJU09XZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbmltcG9ydCBsaWdodEZvcm1hdHRlcnMgZnJvbSBcIi4uL2xpZ2h0Rm9ybWF0dGVycy9pbmRleC5qc1wiO1xudmFyIGRheVBlcmlvZEVudW0gPSB7XG4gIGFtOiAnYW0nLFxuICBwbTogJ3BtJyxcbiAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gIG5vb246ICdub29uJyxcbiAgbW9ybmluZzogJ21vcm5pbmcnLFxuICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICBldmVuaW5nOiAnZXZlbmluZycsXG4gIG5pZ2h0OiAnbmlnaHQnXG59O1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgTWlsbGlzZWNvbmRzIGluIGRheSAgICAgICAgICAgIHxcbiAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAqIHwgIGMgIHwgU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsgIHwgIEMqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGYgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEYqIHwgRGF5IG9mIHdlZWsgaW4gbW9udGggICAgICAgICAgIHxcbiAqIHwgIGcqIHwgTW9kaWZpZWQgSnVsaWFuIGRheSAgICAgICAgICAgIHwgIEcgIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGkhIHwgSVNPIGRheSBvZiB3ZWVrICAgICAgICAgICAgICAgIHwgIEkhIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgIHxcbiAqIHwgIGoqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHwgIEoqIHwgTG9jYWxpemVkIGhvdXIgdy9vIGRheSBwZXJpb2QgIHxcbiAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGwqIHwgKGRlcHJlY2F0ZWQpICAgICAgICAgICAgICAgICAgIHwgIEwgIHwgU3RhbmQtYWxvbmUgbW9udGggICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG8hIHwgT3JkaW5hbCBudW1iZXIgbW9kaWZpZXIgICAgICAgIHwgIE8gIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHAhIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgIHwgIFAhIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgIHxcbiAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHIqIHwgUmVsYXRlZCBHcmVnb3JpYW4geWVhciAgICAgICAgIHwgIFIhIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAqIHwgIHUgIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgIHwgIFUqIHwgQ3ljbGljIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHYqIHwgVGltZXpvbmUgKGdlbmVyaWMgbm9uLWxvY2F0LikgIHwgIFYqIHwgVGltZXpvbmUgKGxvY2F0aW9uKSAgICAgICAgICAgIHxcbiAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHggIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgIHwgIFggIHwgVGltZXpvbmUgKElTTy04NjAxKSAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgIHxcbiAqIHwgIHogIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgISBhcmUgbm9uLXN0YW5kYXJkLCBidXQgaW1wbGVtZW50ZWQgYnkgZGF0ZS1mbnM6XG4gKiAtIGBvYCBtb2RpZmllcyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gdHVybiBpdCBpbnRvIGFuIG9yZGluYWwgKHNlZSBgZm9ybWF0YCBkb2NzKVxuICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICogICBpLmUuIDcgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gKiAtIGBJYCBpcyBJU08gd2VlayBvZiB5ZWFyLCBhcyBvcHBvc2VkIHRvIGB3YCB3aGljaCBpcyBsb2NhbCB3ZWVrIG9mIHllYXIuXG4gKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqICAgYFJgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSWAgYW5kIGBpYFxuICogICBmb3IgdW5pdmVyc2FsIElTTyB3ZWVrLW51bWJlcmluZyBkYXRlLCB3aGVyZWFzXG4gKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAqICAgZm9yIHdlZWstbnVtYmVyaW5nIGRhdGUgc3BlY2lmaWMgdG8gdGhlIGxvY2FsZS5cbiAqIC0gYFBgIGlzIGxvbmcgbG9jYWxpemVkIGRhdGUgZm9ybWF0XG4gKiAtIGBwYCBpcyBsb25nIGxvY2FsaXplZCB0aW1lIGZvcm1hdFxuICovXG5cbnZhciBmb3JtYXR0ZXJzID0ge1xuICAvLyBFcmFcbiAgRzogZnVuY3Rpb24gRyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZXJhID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpID4gMCA/IDEgOiAwO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEFELCBCQ1xuICAgICAgY2FzZSAnRyc6XG4gICAgICBjYXNlICdHRyc6XG4gICAgICBjYXNlICdHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQSwgQlxuICAgICAgY2FzZSAnR0dHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93J1xuICAgICAgICB9KTtcbiAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0XG4gICAgICBjYXNlICdHR0dHJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ3lvJykge1xuICAgICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHllYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICBZOiBmdW5jdGlvbiBZKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBzaWduZWRXZWVrWWVhciA9IGdldFVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgdmFyIHdlZWtZZWFyID0gc2lnbmVkV2Vla1llYXIgPiAwID8gc2lnbmVkV2Vla1llYXIgOiAxIC0gc2lnbmVkV2Vla1llYXI7XG5cbiAgICAvLyBUd28gZGlnaXQgeWVhclxuICAgIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgICAgdmFyIHR3b0RpZ2l0WWVhciA9IHdlZWtZZWFyICUgMTAwO1xuICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0d29EaWdpdFllYXIsIDIpO1xuICAgIH1cblxuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAnWW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrWWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICBSOiBmdW5jdGlvbiBSKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGlzb1dlZWtZZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGF0ZSk7XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRXh0ZW5kZWQgeWVhci4gVGhpcyBpcyBhIHNpbmdsZSBudW1iZXIgZGVzaWduYXRpbmcgdGhlIHllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0uXG4gIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBsb2NhbGl6ZXJzIGFyZSBCLkMuIHllYXJzOlxuICAvLyB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICAvLyB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICAvLyB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICAvLyB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICAvLyB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICAvLyBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gIC8vIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZC5cbiAgdTogZnVuY3Rpb24gdShkYXRlLCB0b2tlbikge1xuICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gUXVhcnRlclxuICBROiBmdW5jdGlvbiBRKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ1EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ1FRJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAnUW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ1FRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ1FRUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAnUVFRUSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBxdWFydGVyXG4gIHE6IGZ1bmN0aW9uIHEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAncSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAncXEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdxbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAncXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAncXFxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdxcXFxJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ00nOlxuICAgICAgY2FzZSAnTU0nOlxuICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLk0oZGF0ZSwgdG9rZW4pO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdNTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ01NTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdNTU1NJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgbW9udGhcbiAgTDogZnVuY3Rpb24gTChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTEwnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdMbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ0xMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTExMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ0xMTEwnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCB3ZWVrIG9mIHllYXJcbiAgdzogZnVuY3Rpb24gdyhkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2VlayA9IGdldFVUQ1dlZWsoZGF0ZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRva2VuID09PSAnd28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWsgb2YgeWVhclxuICBJOiBmdW5jdGlvbiBJKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBpc29XZWVrID0gZ2V0VVRDSVNPV2VlayhkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdJbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb1dlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnZG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0RhdGUoKSwge1xuICAgICAgICB1bml0OiAnZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBEYXkgb2YgeWVhclxuICBEOiBmdW5jdGlvbiBEKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZlllYXIgPSBnZXRVVENEYXlPZlllYXIoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnRG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXlPZlllYXIsIHtcbiAgICAgICAgdW5pdDogJ2RheU9mWWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRheU9mWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHdlZWtcbiAgRTogZnVuY3Rpb24gRShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ0UnOlxuICAgICAgY2FzZSAnRUUnOlxuICAgICAgY2FzZSAnRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdFRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ0VFRUUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIGRheSBvZiB3ZWVrXG4gIGU6IGZ1bmN0aW9uIGUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pXG4gICAgICBjYXNlICdlJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdlZSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlICdlbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2VlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2VlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnZWVlZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWtcbiAgYzogZnVuY3Rpb24gYyhkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKVxuICAgICAgY2FzZSAnYyc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnY2MnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlICdjbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2NjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnY2NjYyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uIGkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMlxuICAgICAgY2FzZSAnaSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTtcbiAgICAgIC8vIDAyXG4gICAgICBjYXNlICdpaSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMm5kXG4gICAgICBjYXNlICdpbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb0RheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2lpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2lpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnaWlpaSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNLCBQTSwgbWlkbmlnaHQsIG5vb25cbiAgYjogZnVuY3Rpb24gYihkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPT09IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA9PT0gMCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5taWRuaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2InOlxuICAgICAgY2FzZSAnYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2JiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlICdiYmJiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2JiYmInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHRcbiAgQjogZnVuY3Rpb24gQihkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPj0gMTcpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uZXZlbmluZztcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmFmdGVybm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDQpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubW9ybmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5uaWdodDtcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnQic6XG4gICAgICBjYXNlICdCQic6XG4gICAgICBjYXNlICdCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdobycpIHtcbiAgICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdIbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDSG91cnMoKSwge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLkgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTExXVxuICBLOiBmdW5jdGlvbiBLKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgIGlmICh0b2tlbiA9PT0gJ0tvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24gayhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDI0O1xuICAgIGlmICh0b2tlbiA9PT0gJ2tvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnbW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ01pbnV0ZXMoKSwge1xuICAgICAgICB1bml0OiAnbWludXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMubShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ3NvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHtcbiAgICAgICAgdW5pdDogJ3NlY29uZCdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuUyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApXG4gIFg6IGZ1bmN0aW9uIFgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZiAodGltZXpvbmVPZmZzZXQgPT09IDApIHtcbiAgICAgIHJldHVybiAnWic7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICdYJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYYFxuICAgICAgY2FzZSAnWFhYWCc6XG4gICAgICBjYXNlICdYWCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWFhgXG4gICAgICBjYXNlICdYWFhYWCc6XG4gICAgICBjYXNlICdYWFgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpXG4gIHg6IGZ1bmN0aW9uIHgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAneCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eGBcbiAgICAgIGNhc2UgJ3h4eHgnOlxuICAgICAgY2FzZSAneHgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHh4YFxuICAgICAgY2FzZSAneHh4eHgnOlxuICAgICAgY2FzZSAneHh4JzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoR01UKVxuICBPOiBmdW5jdGlvbiBPKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ08nOlxuICAgICAgY2FzZSAnT08nOlxuICAgICAgY2FzZSAnT09PJzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgJ09PT08nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0aW9uKVxuICB6OiBmdW5jdGlvbiB6KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ3onOlxuICAgICAgY2FzZSAnenonOlxuICAgICAgY2FzZSAnenp6JzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgJ3p6enonOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBTZWNvbmRzIHRpbWVzdGFtcFxuICB0OiBmdW5jdGlvbiB0KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IE1hdGguZmxvb3Iob3JpZ2luYWxEYXRlLmdldFRpbWUoKSAvIDEwMDApO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gIFQ6IGZ1bmN0aW9uIFQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gb3JpZ2luYWxEYXRlLmdldFRpbWUoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lU2hvcnQob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKTtcbiAgdmFyIG1pbnV0ZXMgPSBhYnNPZmZzZXQgJSA2MDtcbiAgaWYgKG1pbnV0ZXMgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiArIFN0cmluZyhob3Vycyk7XG4gIH1cbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICByZXR1cm4gc2lnbiArIFN0cmluZyhob3VycykgKyBkZWxpbWl0ZXIgKyBhZGRMZWFkaW5nWmVyb3MobWludXRlcywgMik7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICBpZiAob2Zmc2V0ICUgNjAgPT09IDApIHtcbiAgICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gICAgcmV0dXJuIHNpZ24gKyBhZGRMZWFkaW5nWmVyb3MoTWF0aC5hYnMob2Zmc2V0KSAvIDYwLCAyKTtcbiAgfVxuICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcik7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApLCAyKTtcbiAgdmFyIG1pbnV0ZXMgPSBhZGRMZWFkaW5nWmVyb3MoYWJzT2Zmc2V0ICUgNjAsIDIpO1xuICByZXR1cm4gc2lnbiArIGhvdXJzICsgZGVsaW1pdGVyICsgbWludXRlcztcbn1cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgInZhciBkYXRlTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcbnZhciB0aW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIHRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAncCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwcCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcbnZhciBkYXRlVGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlVGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICB2YXIgbWF0Y2hSZXN1bHQgPSBwYXR0ZXJuLm1hdGNoKC8oUCspKHArKT8vKSB8fCBbXTtcbiAgdmFyIGRhdGVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMV07XG4gIHZhciB0aW1lUGF0dGVybiA9IG1hdGNoUmVzdWx0WzJdO1xuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG4gIHZhciBkYXRlVGltZUZvcm1hdDtcbiAgc3dpdGNoIChkYXRlUGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCd7e2RhdGV9fScsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nKSkucmVwbGFjZSgne3t0aW1lfX0nLCB0aW1lTG9uZ0Zvcm1hdHRlcih0aW1lUGF0dGVybiwgZm9ybWF0TG9uZykpO1xufTtcbnZhciBsb25nRm9ybWF0dGVycyA9IHtcbiAgcDogdGltZUxvbmdGb3JtYXR0ZXIsXG4gIFA6IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlclxufTtcbmV4cG9ydCBkZWZhdWx0IGxvbmdGb3JtYXR0ZXJzOyIsICIvKipcbiAqIEdvb2dsZSBDaHJvbWUgYXMgb2YgNjcuMC4zMzk2Ljg3IGludHJvZHVjZWQgdGltZXpvbmVzIHdpdGggb2Zmc2V0IHRoYXQgaW5jbHVkZXMgc2Vjb25kcy5cbiAqIFRoZXkgdXN1YWxseSBhcHBlYXIgZm9yIGRhdGVzIHRoYXQgZGVub3RlIHRpbWUgYmVmb3JlIHRoZSB0aW1lem9uZXMgd2VyZSBpbnRyb2R1Y2VkXG4gKiAoZS5nLiBmb3IgJ0V1cm9wZS9QcmFndWUnIHRpbWV6b25lIHRoZSBvZmZzZXQgaXMgR01UKzAwOjU3OjQ0IGJlZm9yZSAxIE9jdG9iZXIgMTg5MVxuICogYW5kIEdNVCswMTowMDowMCBhZnRlciB0aGF0IGRhdGUpXG4gKlxuICogRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIHRoZSBvZmZzZXQgaW4gbWludXRlcyBhbmQgd291bGQgcmV0dXJuIDU3IGZvciB0aGUgZXhhbXBsZSBhYm92ZSxcbiAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWV6b25lIG9mZnNldCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0YWtlcyBzZWNvbmRzIGluIGFjY291bnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkge1xuICB2YXIgdXRjRGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCksIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpKTtcbiAgdXRjRGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgLSB1dGNEYXRlLmdldFRpbWUoKTtcbn0iLCAidmFyIHByb3RlY3RlZERheU9mWWVhclRva2VucyA9IFsnRCcsICdERCddO1xudmFyIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zID0gWydZWScsICdZWVlZJ107XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGlmICh0b2tlbiA9PT0gJ1lZWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0QnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRgIGluc3RlYWQgb2YgYERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0REJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfVxufSIsICJ2YXIgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBzZWNvbmQnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICB4U2Vjb25kczoge1xuICAgIG9uZTogJzEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICBoYWxmQU1pbnV0ZTogJ2hhbGYgYSBtaW51dGUnLFxuICBsZXNzVGhhblhNaW51dGVzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgbWludXRlJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6ICcxIG1pbnV0ZScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgYWJvdXRYSG91cnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIGhvdXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4SG91cnM6IHtcbiAgICBvbmU6ICcxIGhvdXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4RGF5czoge1xuICAgIG9uZTogJzEgZGF5JyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBkYXlzJ1xuICB9LFxuICBhYm91dFhXZWVrczoge1xuICAgIG9uZTogJ2Fib3V0IDEgd2VlaycsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIHhXZWVrczoge1xuICAgIG9uZTogJzEgd2VlaycsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogJ2Fib3V0IDEgbW9udGgnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgeE1vbnRoczoge1xuICAgIG9uZTogJzEgbW9udGgnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIHllYXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICB4WWVhcnM6IHtcbiAgICBvbmU6ICcxIHllYXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBvdmVyWFllYXJzOiB7XG4gICAgb25lOiAnb3ZlciAxIHllYXInLFxuICAgIG90aGVyOiAnb3ZlciB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIGFsbW9zdFhZZWFyczoge1xuICAgIG9uZTogJ2FsbW9zdCAxIHllYXInLFxuICAgIG90aGVyOiAnYWxtb3N0IHt7Y291bnR9fSB5ZWFycydcbiAgfVxufTtcbnZhciBmb3JtYXREaXN0YW5jZSA9IGZ1bmN0aW9uIGZvcm1hdERpc3RhbmNlKHRva2VuLCBjb3VudCwgb3B0aW9ucykge1xuICB2YXIgcmVzdWx0O1xuICB2YXIgdG9rZW5WYWx1ZSA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXTtcbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWU7XG4gIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm9uZTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm90aGVyLnJlcGxhY2UoJ3t7Y291bnR9fScsIGNvdW50LnRvU3RyaW5nKCkpO1xuICB9XG4gIGlmIChvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLmFkZFN1ZmZpeCkge1xuICAgIGlmIChvcHRpb25zLmNvbXBhcmlzb24gJiYgb3B0aW9ucy5jb21wYXJpc29uID4gMCkge1xuICAgICAgcmV0dXJuICdpbiAnICsgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgJyBhZ28nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdERpc3RhbmNlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZvcm1hdExvbmdGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIC8vIFRPRE86IFJlbW92ZSBTdHJpbmcoKVxuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICB2YXIgZm9ybWF0ID0gYXJncy5mb3JtYXRzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHNbYXJncy5kZWZhdWx0V2lkdGhdO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH07XG59IiwgImltcG9ydCBidWlsZEZvcm1hdExvbmdGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZEZvcm1hdExvbmdGbi9pbmRleC5qc1wiO1xudmFyIGRhdGVGb3JtYXRzID0ge1xuICBmdWxsOiAnRUVFRSwgTU1NTSBkbywgeScsXG4gIGxvbmc6ICdNTU1NIGRvLCB5JyxcbiAgbWVkaXVtOiAnTU1NIGQsIHknLFxuICBzaG9ydDogJ01NL2RkL3l5eXknXG59O1xudmFyIHRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiAnaDptbTpzcyBhIHp6enonLFxuICBsb25nOiAnaDptbTpzcyBhIHonLFxuICBtZWRpdW06ICdoOm1tOnNzIGEnLFxuICBzaG9ydDogJ2g6bW0gYSdcbn07XG52YXIgZGF0ZVRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbG9uZzogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIG1lZGl1bTogJ3t7ZGF0ZX19LCB7e3RpbWV9fScsXG4gIHNob3J0OiAne3tkYXRlfX0sIHt7dGltZX19J1xufTtcbnZhciBmb3JtYXRMb25nID0ge1xuICBkYXRlOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIHRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiB0aW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgZGF0ZVRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlVGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRMb25nOyIsICJ2YXIgZm9ybWF0UmVsYXRpdmVMb2NhbGUgPSB7XG4gIGxhc3RXZWVrOiBcIidsYXN0JyBlZWVlICdhdCcgcFwiLFxuICB5ZXN0ZXJkYXk6IFwiJ3llc3RlcmRheSBhdCcgcFwiLFxuICB0b2RheTogXCIndG9kYXkgYXQnIHBcIixcbiAgdG9tb3Jyb3c6IFwiJ3RvbW9ycm93IGF0JyBwXCIsXG4gIG5leHRXZWVrOiBcImVlZWUgJ2F0JyBwXCIsXG4gIG90aGVyOiAnUCdcbn07XG52YXIgZm9ybWF0UmVsYXRpdmUgPSBmdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZSh0b2tlbiwgX2RhdGUsIF9iYXNlRGF0ZSwgX29wdGlvbnMpIHtcbiAgcmV0dXJuIGZvcm1hdFJlbGF0aXZlTG9jYWxlW3Rva2VuXTtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRSZWxhdGl2ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRMb2NhbGl6ZUZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkaXJ0eUluZGV4LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLmNvbnRleHQgPyBTdHJpbmcob3B0aW9ucy5jb250ZXh0KSA6ICdzdGFuZGFsb25lJztcbiAgICB2YXIgdmFsdWVzQXJyYXk7XG4gICAgaWYgKGNvbnRleHQgPT09ICdmb3JtYXR0aW5nJyAmJiBhcmdzLmZvcm1hdHRpbmdWYWx1ZXMpIHtcbiAgICAgIHZhciBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRGb3JtYXR0aW5nV2lkdGggfHwgYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2RlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIF93aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy52YWx1ZXNbX3dpZHRoXSB8fCBhcmdzLnZhbHVlc1tfZGVmYXVsdFdpZHRoXTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gYXJncy5hcmd1bWVudENhbGxiYWNrID8gYXJncy5hcmd1bWVudENhbGxiYWNrKGRpcnR5SW5kZXgpIDogZGlydHlJbmRleDtcbiAgICAvLyBAdHMtaWdub3JlOiBGb3Igc29tZSByZWFzb24gVHlwZVNjcmlwdCBqdXN0IGRvbid0IHdhbnQgdG8gbWF0Y2ggaXQsIG5vIG1hdHRlciBob3cgaGFyZCB3ZSB0cnkuIEkgY2hhbGxlbmdlIHlvdSB0byB0cnkgdG8gcmVtb3ZlIGl0IVxuICAgIHJldHVybiB2YWx1ZXNBcnJheVtpbmRleF07XG4gIH07XG59IiwgImltcG9ydCBidWlsZExvY2FsaXplRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRMb2NhbGl6ZUZuL2luZGV4LmpzXCI7XG52YXIgZXJhVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnQicsICdBJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0JDJywgJ0FEJ10sXG4gIHdpZGU6IFsnQmVmb3JlIENocmlzdCcsICdBbm5vIERvbWluaSddXG59O1xudmFyIHF1YXJ0ZXJWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWycxJywgJzInLCAnMycsICc0J10sXG4gIGFiYnJldmlhdGVkOiBbJ1ExJywgJ1EyJywgJ1EzJywgJ1E0J10sXG4gIHdpZGU6IFsnMXN0IHF1YXJ0ZXInLCAnMm5kIHF1YXJ0ZXInLCAnM3JkIHF1YXJ0ZXInLCAnNHRoIHF1YXJ0ZXInXVxufTtcblxuLy8gTm90ZTogaW4gRW5nbGlzaCwgdGhlIG5hbWVzIG9mIGRheXMgb2YgdGhlIHdlZWsgYW5kIG1vbnRocyBhcmUgY2FwaXRhbGl6ZWQuXG4vLyBJZiB5b3UgYXJlIG1ha2luZyBhIG5ldyBsb2NhbGUgYmFzZWQgb24gdGhpcyBvbmUsIGNoZWNrIGlmIHRoZSBzYW1lIGlzIHRydWUgZm9yIHRoZSBsYW5ndWFnZSB5b3UncmUgd29ya2luZyBvbi5cbi8vIEdlbmVyYWxseSwgZm9ybWF0dGVkIGRhdGVzIHNob3VsZCBsb29rIGxpa2UgdGhleSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHNlbnRlbmNlLFxuLy8gZS5nLiBpbiBTcGFuaXNoIGxhbmd1YWdlIHRoZSB3ZWVrZGF5cyBhbmQgbW9udGhzIHNob3VsZCBiZSBpbiB0aGUgbG93ZXJjYXNlLlxudmFyIG1vbnRoVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnSicsICdGJywgJ00nLCAnQScsICdNJywgJ0onLCAnSicsICdBJywgJ1MnLCAnTycsICdOJywgJ0QnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcbiAgd2lkZTogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ11cbn07XG52YXIgZGF5VmFsdWVzID0ge1xuICBuYXJyb3c6IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddLFxuICBzaG9ydDogWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddLFxuICBhYmJyZXZpYXRlZDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcbiAgd2lkZTogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddXG59O1xudmFyIGRheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9XG59O1xudmFyIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfVxufTtcbnZhciBvcmRpbmFsTnVtYmVyID0gZnVuY3Rpb24gb3JkaW5hbE51bWJlcihkaXJ0eU51bWJlciwgX29wdGlvbnMpIHtcbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgLy8gSWYgb3JkaW5hbCBudW1iZXJzIGRlcGVuZCBvbiBjb250ZXh0LCBmb3IgZXhhbXBsZSxcbiAgLy8gaWYgdGhleSBhcmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgZ3JhbW1hdGljYWwgZ2VuZGVycyxcbiAgLy8gdXNlIGBvcHRpb25zLnVuaXRgLlxuICAvL1xuICAvLyBgdW5pdGAgY2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXRlJywgJ2RheU9mWWVhcicsXG4gIC8vICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJy5cblxuICB2YXIgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuICBpZiAocmVtMTAwID4gMjAgfHwgcmVtMTAwIDwgMTApIHtcbiAgICBzd2l0Y2ggKHJlbTEwMCAlIDEwKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnc3QnO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ25kJztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdyZCc7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW1iZXIgKyAndGgnO1xufTtcbnZhciBsb2NhbGl6ZSA9IHtcbiAgb3JkaW5hbE51bWJlcjogb3JkaW5hbE51bWJlcixcbiAgZXJhOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZXJhVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogcXVhcnRlclZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJyxcbiAgICBhcmd1bWVudENhbGxiYWNrOiBmdW5jdGlvbiBhcmd1bWVudENhbGxiYWNrKHF1YXJ0ZXIpIHtcbiAgICAgIHJldHVybiBxdWFydGVyIC0gMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXk6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJyxcbiAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6ICd3aWRlJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsaXplOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoO1xuICAgIHZhciBtYXRjaFBhdHRlcm4gPSB3aWR0aCAmJiBhcmdzLm1hdGNoUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MubWF0Y2hQYXR0ZXJuc1thcmdzLmRlZmF1bHRNYXRjaFdpZHRoXTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2gobWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VQYXR0ZXJucyA9IHdpZHRoICYmIGFyZ3MucGFyc2VQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5wYXJzZVBhdHRlcm5zW2FyZ3MuZGVmYXVsdFBhcnNlV2lkdGhdO1xuICAgIHZhciBrZXkgPSBBcnJheS5pc0FycmF5KHBhcnNlUGF0dGVybnMpID8gZmluZEluZGV4KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pIDogZmluZEtleShwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KTtcbiAgICB2YXIgdmFsdWU7XG4gICAgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2soa2V5KSA6IGtleTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufVxuZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHByZWRpY2F0ZShvYmplY3Rba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBrZXkgPSAwOyBrZXkgPCBhcnJheS5sZW5ndGg7IGtleSsrKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhwYXJzZVJlc3VsdFswXSkgOiBwYXJzZVJlc3VsdFswXTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRNYXRjaEZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qc1wiO1xuaW1wb3J0IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi9pbmRleC5qc1wiO1xudmFyIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcXGQrKSh0aHxzdHxuZHxyZCk/L2k7XG52YXIgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9cXGQrL2k7XG52YXIgbWF0Y2hFcmFQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihifGEpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihiXFwuP1xccz9jXFwuP3xiXFwuP1xccz9jXFwuP1xccz9lXFwuP3xhXFwuP1xccz9kXFwuP3xjXFwuP1xccz9lXFwuPykvaSxcbiAgd2lkZTogL14oYmVmb3JlIGNocmlzdHxiZWZvcmUgY29tbW9uIGVyYXxhbm5vIGRvbWluaXxjb21tb24gZXJhKS9pXG59O1xudmFyIHBhcnNlRXJhUGF0dGVybnMgPSB7XG4gIGFueTogWy9eYi9pLCAvXihhfGMpL2ldXG59O1xudmFyIG1hdGNoUXVhcnRlclBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eWzEyMzRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXnFbMTIzNF0vaSxcbiAgd2lkZTogL15bMTIzNF0odGh8c3R8bmR8cmQpPyBxdWFydGVyL2lcbn07XG52YXIgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7XG4gIGFueTogWy8xL2ksIC8yL2ksIC8zL2ksIC80L2ldXG59O1xudmFyIG1hdGNoTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltqZm1hc29uZF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLFxuICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pXG59O1xudmFyIHBhcnNlTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15qL2ksIC9eZi9pLCAvXm0vaSwgL15hL2ksIC9ebS9pLCAvXmovaSwgL15qL2ksIC9eYS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV0sXG4gIGFueTogWy9eamEvaSwgL15mL2ksIC9ebWFyL2ksIC9eYXAvaSwgL15tYXkvaSwgL15qdW4vaSwgL15qdWwvaSwgL15hdS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV1cbn07XG52YXIgbWF0Y2hEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltzbXR3Zl0vaSxcbiAgc2hvcnQ6IC9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0KS9pLFxuICB3aWRlOiAvXihzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSkvaVxufTtcbnZhciBwYXJzZURheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXnMvaSwgL15tL2ksIC9edC9pLCAvXncvaSwgL150L2ksIC9eZi9pLCAvXnMvaV0sXG4gIGFueTogWy9ec3UvaSwgL15tL2ksIC9edHUvaSwgL153L2ksIC9edGgvaSwgL15mL2ksIC9ec2EvaV1cbn07XG52YXIgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksXG4gIGFueTogL14oW2FwXVxcLj9cXHM/bVxcLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2lcbn07XG52YXIgcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgYW55OiB7XG4gICAgYW06IC9eYS9pLFxuICAgIHBtOiAvXnAvaSxcbiAgICBtaWRuaWdodDogL15taS9pLFxuICAgIG5vb246IC9ebm8vaSxcbiAgICBtb3JuaW5nOiAvbW9ybmluZy9pLFxuICAgIGFmdGVybm9vbjogL2FmdGVybm9vbi9pLFxuICAgIGV2ZW5pbmc6IC9ldmVuaW5nL2ksXG4gICAgbmlnaHQ6IC9uaWdodC9pXG4gIH1cbn07XG52YXIgbWF0Y2ggPSB7XG4gIG9yZGluYWxOdW1iZXI6IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oe1xuICAgIG1hdGNoUGF0dGVybjogbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICBwYXJzZVBhdHRlcm46IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuICB9KSxcbiAgZXJhOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZUVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55JyxcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggKyAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnYW55JyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IG1hdGNoOyIsICJpbXBvcnQgZm9ybWF0RGlzdGFuY2UgZnJvbSBcIi4vX2xpYi9mb3JtYXREaXN0YW5jZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdExvbmcgZnJvbSBcIi4vX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0UmVsYXRpdmUgZnJvbSBcIi4vX2xpYi9mb3JtYXRSZWxhdGl2ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGxvY2FsaXplIGZyb20gXCIuL19saWIvbG9jYWxpemUvaW5kZXguanNcIjtcbmltcG9ydCBtYXRjaCBmcm9tIFwiLi9fbGliL21hdGNoL2luZGV4LmpzXCI7XG4vKipcbiAqIEB0eXBlIHtMb2NhbGV9XG4gKiBAY2F0ZWdvcnkgTG9jYWxlc1xuICogQHN1bW1hcnkgRW5nbGlzaCBsb2NhbGUgKFVuaXRlZCBTdGF0ZXMpLlxuICogQGxhbmd1YWdlIEVuZ2xpc2hcbiAqIEBpc28tNjM5LTIgZW5nXG4gKiBAYXV0aG9yIFNhc2hhIEtvc3MgW0Brb3Nzbm9jb3JwXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20va29zc25vY29ycH1cbiAqIEBhdXRob3IgTGVzaGEgS29zcyBbQGxlc2hha29zc117QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xlc2hha29zc31cbiAqL1xudmFyIGxvY2FsZSA9IHtcbiAgY29kZTogJ2VuLVVTJyxcbiAgZm9ybWF0RGlzdGFuY2U6IGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXRMb25nOiBmb3JtYXRMb25nLFxuICBmb3JtYXRSZWxhdGl2ZTogZm9ybWF0UmVsYXRpdmUsXG4gIGxvY2FsaXplOiBsb2NhbGl6ZSxcbiAgbWF0Y2g6IG1hdGNoLFxuICBvcHRpb25zOiB7XG4gICAgd2Vla1N0YXJ0c09uOiAwIC8qIFN1bmRheSAqLyxcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDFcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsZTsiLCAiaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uLy4uL2xvY2FsZS9lbi1VUy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdExvY2FsZTsiLCAiaW1wb3J0IGlzVmFsaWQgZnJvbSBcIi4uL2lzVmFsaWQvaW5kZXguanNcIjtcbmltcG9ydCBzdWJNaWxsaXNlY29uZHMgZnJvbSBcIi4uL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvZm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGxvbmdGb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbiwgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuLCB0aHJvd1Byb3RlY3RlZEVycm9yIH0gZnJvbSBcIi4uL19saWIvcHJvdGVjdGVkVG9rZW5zL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi9fbGliL2RlZmF1bHRMb2NhbGUvaW5kZXguanNcIjsgLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG52YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcXHcpXFwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuLy8gVGhpcyBSZWdFeHAgY2F0Y2hlcyBzeW1ib2xzIGVzY2FwZWQgYnkgcXVvdGVzLCBhbmQgYWxzb1xuLy8gc2VxdWVuY2VzIG9mIHN5bWJvbHMgUCwgcCwgYW5kIHRoZSBjb21iaW5hdGlvbnMgbGlrZSBgUFBQUFBQUHBwcHBwYFxudmFyIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG52YXIgZXNjYXBlZFN0cmluZ1JlZ0V4cCA9IC9eJyhbXl0qPyknPyQvO1xudmFyIGRvdWJsZVF1b3RlUmVnRXhwID0gLycnL2c7XG52YXIgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vO1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXQgdGhlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LiBUaGUgcmVzdWx0IG1heSB2YXJ5IGJ5IGxvY2FsZS5cbiAqXG4gKiA+IFx1MjZBMFx1RkUwRiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBgZm9ybWF0YCB0b2tlbnMgZGlmZmVyIGZyb20gTW9tZW50LmpzIGFuZCBvdGhlciBsaWJyYXJpZXMuXG4gKiA+IFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIFRoZSBjaGFyYWN0ZXJzIHdyYXBwZWQgYmV0d2VlbiB0d28gc2luZ2xlIHF1b3RlcyBjaGFyYWN0ZXJzICgnKSBhcmUgZXNjYXBlZC5cbiAqIFR3byBzaW5nbGUgcXVvdGVzIGluIGEgcm93LCB3aGV0aGVyIGluc2lkZSBvciBvdXRzaWRlIGEgcXVvdGVkIHNlcXVlbmNlLCByZXByZXNlbnQgYSAncmVhbCcgc2luZ2xlIHF1b3RlLlxuICogKHNlZSB0aGUgbGFzdCBleGFtcGxlKVxuICpcbiAqIEZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGJhc2VkIG9uIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGVcbiAqIHdpdGggYSBmZXcgYWRkaXRpb25zIChzZWUgbm90ZSA3IGJlbG93IHRoZSB0YWJsZSkuXG4gKlxuICogQWNjZXB0ZWQgcGF0dGVybnM6XG4gKiB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXR0ZXJuIHwgUmVzdWx0IGV4YW1wbGVzICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLXxcbiAqIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEcuLkdHRyAgfCBBRCwgQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHICAgIHwgQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3QgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHR0cgICB8IEEsIEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ2FsZW5kYXIgeWVhciAgICAgICAgICAgICAgICAgICB8IHkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5byAgICAgIHwgNDR0aCwgMXN0LCAwdGgsIDE3dGggICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5ICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eXkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICB8IFkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZbyAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDIwMTd0aCAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWVkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgICB8IFIgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUiAgICAgIHwgLTQzLCAwMCwgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSICAgICB8IC0wNDMsIDAwMCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlIgICAgfCAtMDA0MywgMDAwMCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSUiAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1LDcgfFxuICogfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgIHwgdSAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1ICAgICAgfCAtNDMsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXUgICAgIHwgLTA0MywgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dSAgICB8IC0wMDQzLCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXV1ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IFF1YXJ0ZXIgKGZvcm1hdHRpbmcpICAgICAgICAgICAgfCBRICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVFRICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IFF1YXJ0ZXIgKHN0YW5kLWFsb25lKSAgICAgICAgICAgfCBxICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXFxICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IE1vbnRoIChmb3JtYXR0aW5nKSAgICAgICAgICAgICAgfCBNICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU0gICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTSAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU1NICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1vbnRoIChzdGFuZC1hbG9uZSkgICAgICAgICAgICAgfCBMICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTEwgICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTCAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTExMICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgfCB3ICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHd3ICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICAgfCBJICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElJICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICAgfCBkICAgICAgIHwgMSwgMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDMxc3QgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRkICAgICAgfCAwMSwgMDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICAgfCBEICAgICAgIHwgMSwgMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDM2NXRoLCAzNjZ0aCAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREICAgICAgfCAwMSwgMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREQgICAgIHwgMDAxLCAwMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRERERCAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgRGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgICAgICB8IEUuLkVFRSAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFRSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgfCBpICAgICAgIHwgMSwgMiwgMywgLi4uLCA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDd0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpICAgICAgfCAwMSwgMDIsIC4uLiwgMDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWkgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaWkgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgNyAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgIHwgZSAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZSAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWVlICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKHN0YW5kLWFsb25lKSB8IGMgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2MgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjYyAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2MgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjYyAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhLi5hYSAgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhICAgICB8IGFtLCBwbSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWEgICAgfCBhLm0uLCBwLm0uICAgICAgICAgICAgICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhYSAgIHwgYSwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgIHwgYi4uYmIgICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYiAgICAgfCBhbSwgcG0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiICAgIHwgYS5tLiwgcC5tLiwgbm9vbiwgbWlkbmlnaHQgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYmIgICB8IGEsIHAsIG4sIG1pICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgICB8IEIuLkJCQiAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCICAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQkIgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgICB8IGggICAgICAgfCAxLCAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBobyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMTJ0aCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGggICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgICB8IEggICAgICAgfCAwLCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIbyAgICAgIHwgMHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEggICAgICB8IDAwLCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgICB8IEsgICAgICAgfCAxLCAyLCAuLi4sIDExLCAwICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMHRoICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS0sgICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgICB8IGsgICAgICAgfCAyNCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrbyAgICAgIHwgMjR0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2sgICAgICB8IDI0LCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICB8IHMgICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3MgICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgICB8IFMgICAgICAgfCAwLCAxLCAuLi4sIDkgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTICAgICB8IDAwMCwgMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTU1MgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3LyBaKSAgICAgICAgfCBYICAgICAgIHwgLTA4LCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFggICAgICB8IC0wODAwLCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWCAgICAgfCAtMDg6MDAsICswNTozMCwgWiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYICAgIHwgLTA4MDAsICswNTMwLCBaLCArMTIzNDU2ICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWFggICB8IC0wODowMCwgKzA1OjMwLCBaLCArMTI6MzQ6NTYgICAgICB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgICB8IHggICAgICAgfCAtMDgsICswNTMwLCArMDAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eCAgICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4ICAgICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHggICAgfCAtMDgwMCwgKzA1MzAsICswMDAwLCArMTIzNDU2ICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4eCAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCwgKzEyOjM0OjU2IHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgIHwgTy4uLk9PTyB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9PT08gICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyICAgICB8XG4gKiB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSAgfCB6Li4uenp6IHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgNiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgenp6eiAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIsNiAgIHxcbiAqIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgICB8IHQgICAgICAgfCA1MTI5Njk1MjAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0dCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgIHwgVCAgICAgICB8IDUxMjk2OTUyMDkwMCAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRUICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICAgfCBQICAgICAgIHwgMDQvMjkvMTQ1MyAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFAgICAgICB8IEFwciAyOSwgMTQ1MyAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUCAgICAgfCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQICAgIHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgIHwgcCAgICAgICB8IDEyOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwICAgICAgfCAxMjowMDowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHAgICAgIHwgMTI6MDA6MDAgQU0gR01UKzIgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwcCAgICB8IDEyOjAwOjAwIEFNIEdNVCswMjowMCAgICAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgQ29tYmluYXRpb24gb2YgZGF0ZSBhbmQgdGltZSAgICB8IFBwICAgICAgfCAwNC8yOS8xNDUzLCAxMjowMCBBTSAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUHBwICAgIHwgQXByIDI5LCAxNDUzLCAxMjowMDowMCBBTSAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQcHBwICB8IEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFBwcHBwfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgfCAyLDcgICB8XG4gKiBOb3RlczpcbiAqIDEuIFwiRm9ybWF0dGluZ1wiIHVuaXRzIChlLmcuIGZvcm1hdHRpbmcgcXVhcnRlcikgaW4gdGhlIGRlZmF1bHQgZW4tVVMgbG9jYWxlXG4gKiAgICBhcmUgdGhlIHNhbWUgYXMgXCJzdGFuZC1hbG9uZVwiIHVuaXRzLCBidXQgYXJlIGRpZmZlcmVudCBpbiBzb21lIGxhbmd1YWdlcy5cbiAqICAgIFwiRm9ybWF0dGluZ1wiIHVuaXRzIGFyZSBkZWNsaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsYW5ndWFnZVxuICogICAgaW4gdGhlIGNvbnRleHQgb2YgYSBkYXRlLiBcIlN0YW5kLWFsb25lXCIgdW5pdHMgYXJlIGFsd2F5cyBub21pbmF0aXZlIHNpbmd1bGFyOlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTExMTCcsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWQnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTU1NTScsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWR1J2BcbiAqXG4gKiAyLiBBbnkgc2VxdWVuY2Ugb2YgdGhlIGlkZW50aWNhbCBsZXR0ZXJzIGlzIGEgcGF0dGVybiwgdW5sZXNzIGl0IGlzIGVzY2FwZWQgYnlcbiAqICAgIHRoZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoc2VlIGJlbG93KS5cbiAqICAgIElmIHRoZSBzZXF1ZW5jZSBpcyBsb25nZXIgdGhhbiBsaXN0ZWQgaW4gdGFibGUgKGUuZy4gYEVFRUVFRUVFRUVFYClcbiAqICAgIHRoZSBvdXRwdXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBkZWZhdWx0IHBhdHRlcm4gZm9yIHRoaXMgdW5pdCwgdXN1YWxseVxuICogICAgdGhlIGxvbmdlc3Qgb25lIChpbiBjYXNlIG9mIElTTyB3ZWVrZGF5cywgYEVFRUVgKS4gRGVmYXVsdCBwYXR0ZXJucyBmb3IgdW5pdHNcbiAqICAgIGFyZSBtYXJrZWQgd2l0aCBcIjJcIiBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NJykgLy89PiAnTm92J2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTScpIC8vPT4gJ04nYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAzLiBTb21lIHBhdHRlcm5zIGNvdWxkIGJlIHVubGltaXRlZCBsZW5ndGggKHN1Y2ggYXMgYHl5eXl5eXl5YCkuXG4gKiAgICBUaGUgb3V0cHV0IHdpbGwgYmUgcGFkZGVkIHdpdGggemVyb3MgdG8gbWF0Y2ggdGhlIGxlbmd0aCBvZiB0aGUgcGF0dGVybi5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ3l5eXl5eXl5JykgLy89PiAnMDAwMDIwMTcnYFxuICpcbiAqIDQuIGBRUVFRUWAgYW5kIGBxcXFxcWAgY291bGQgYmUgbm90IHN0cmljdGx5IG51bWVyaWNhbCBpbiBzb21lIGxvY2FsZXMuXG4gKiAgICBUaGVzZSB0b2tlbnMgcmVwcmVzZW50IHRoZSBzaG9ydGVzdCBmb3JtIG9mIHRoZSBxdWFydGVyLlxuICpcbiAqIDUuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBwYXR0ZXJucyBhcmUgQi5DLiB5ZWFyczpcbiAqXG4gKiAgICB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICogICAgfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAqICAgIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gKiAgICB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICogICAgfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAqXG4gKiAgICBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gKiAgICB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQ6XG4gKlxuICogICAgfCBZZWFyIHwgYHl5YCB8IGB1dWAgfFxuICogICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuICogICAgfCAxICAgIHwgICAwMSB8ICAgMDEgfFxuICogICAgfCAxNCAgIHwgICAxNCB8ICAgMTQgfFxuICogICAgfCAzNzYgIHwgICA3NiB8ICAzNzYgfFxuICogICAgfCAxNDUzIHwgICA1MyB8IDE0NTMgfFxuICpcbiAqICAgIFRoZSBzYW1lIGRpZmZlcmVuY2UgaXMgdHJ1ZSBmb3IgbG9jYWwgYW5kIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyAoYFlgIGFuZCBgUmApLFxuICogICAgZXhjZXB0IGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBkZXBlbmRlbnQgb24gYG9wdGlvbnMud2Vla1N0YXJ0c09uYFxuICogICAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKGNvbXBhcmUgW2dldElTT1dlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldElTT1dlZWtZZWFyfVxuICogICAgYW5kIFtnZXRXZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRXZWVrWWVhcn0pLlxuICpcbiAqIDYuIFNwZWNpZmljIG5vbi1sb2NhdGlvbiB0aW1lem9uZXMgYXJlIGN1cnJlbnRseSB1bmF2YWlsYWJsZSBpbiBgZGF0ZS1mbnNgLFxuICogICAgc28gcmlnaHQgbm93IHRoZXNlIHRva2VucyBmYWxsIGJhY2sgdG8gR01UIHRpbWV6b25lcy5cbiAqXG4gKiA3LiBUaGVzZSBwYXR0ZXJucyBhcmUgbm90IGluIHRoZSBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiAgICAtIGBpYDogSVNPIGRheSBvZiB3ZWVrXG4gKiAgICAtIGBJYDogSVNPIHdlZWsgb2YgeWVhclxuICogICAgLSBgUmA6IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKiAgICAtIGB0YDogc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYFRgOiBtaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBvYDogb3JkaW5hbCBudW1iZXIgbW9kaWZpZXJcbiAqICAgIC0gYFBgOiBsb25nIGxvY2FsaXplZCBkYXRlXG4gKiAgICAtIGBwYDogbG9uZyBsb2NhbGl6ZWQgdGltZVxuICpcbiAqIDguIGBZWWAgYW5kIGBZWVlZYCB0b2tlbnMgcmVwcmVzZW50IHdlZWstbnVtYmVyaW5nIHllYXJzIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIHllYXJzLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogOS4gYERgIGFuZCBgRERgIHRva2VucyByZXByZXNlbnQgZGF5cyBvZiB0aGUgeWVhciBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCBkYXlzIG9mIHRoZSBtb250aC5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgLSB0aGUgc3RyaW5nIG9mIHRva2Vuc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlPTFdIC0gdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpc1xuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyIHRva2VucyBgWVlgIGFuZCBgWVlZWWA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgZGF5IG9mIHllYXIgdG9rZW5zIGBEYCBhbmQgYEREYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgbG9jYWxpemVgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgZm9ybWF0TG9uZ2AgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLndlZWtTdGFydHNPbmAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDZcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDdcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMTEgRmVicnVhcnkgMjAxNCBpbiBtaWRkbGUtZW5kaWFuIGZvcm1hdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCAxLCAxMSksICdNTS9kZC95eXl5JylcbiAqIC8vPT4gJzAyLzExLzIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAyIEp1bHkgMjAxNCBpbiBFc3BlcmFudG86XG4gKiBpbXBvcnQgeyBlb0xvY2FsZSB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbydcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyKSwgXCJkbyAnZGUnIE1NTU0geXl5eVwiLCB7XG4gKiAgIGxvY2FsZTogZW9Mb2NhbGVcbiAqIH0pXG4gKiAvLz0+ICcyLWEgZGUganVsaW8gMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXNjYXBlIHN0cmluZyBieSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyczpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxNSksIFwiaCAnbycnY2xvY2snXCIpXG4gKiAvLz0+IFwiMyBvJ2Nsb2NrXCJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXQoZGlydHlEYXRlLCBkaXJ0eUZvcm1hdFN0ciwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX29wdGlvbnMkbG9jYWxlLCBfcmVmMiwgX3JlZjMsIF9yZWY0LCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZTIsIF9vcHRpb25zJGxvY2FsZTIkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLCBfcmVmNSwgX3JlZjYsIF9yZWY3LCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZTMsIF9vcHRpb25zJGxvY2FsZTMkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMywgX2RlZmF1bHRPcHRpb25zJGxvY2FsNDtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBmb3JtYXRTdHIgPSBTdHJpbmcoZGlydHlGb3JtYXRTdHIpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgbG9jYWxlID0gKF9yZWYgPSAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX29wdGlvbnMkbG9jYWxlICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRsb2NhbGUgOiBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBkZWZhdWx0TG9jYWxlO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmMiA9IChfcmVmMyA9IChfcmVmNCA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTIgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTIub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMiRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUyJG9wdGkuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmNCAhPT0gdm9pZCAwID8gX3JlZjQgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmNSA9IChfcmVmNiA9IChfcmVmNyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTMub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUzJG9wdGkud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNyAhPT0gdm9pZCAwID8gX3JlZjcgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY2ICE9PSB2b2lkIDAgPyBfcmVmNiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsNC53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY1ICE9PSB2b2lkIDAgPyBfcmVmNSA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5sb2NhbGl6ZSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGxvY2FsaXplIHByb3BlcnR5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUuZm9ybWF0TG9uZykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGZvcm1hdExvbmcgcHJvcGVydHknKTtcbiAgfVxuICB2YXIgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIGlmICghaXNWYWxpZChvcmlnaW5hbERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB9XG5cbiAgLy8gQ29udmVydCB0aGUgZGF0ZSBpbiBzeXN0ZW0gdGltZXpvbmUgdG8gdGhlIHNhbWUgZGF0ZSBpbiBVVEMrMDA6MDAgdGltZXpvbmUuXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gVVRDIGZ1bmN0aW9ucyB3aWxsIGJlIGltcGxlbWVudGVkLCBsb2NhbGVzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIHRoZW0uXG4gIC8vIFNlZSBhbiBpc3N1ZSBhYm91dCBVVEMgZnVuY3Rpb25zOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM3NlxuICB2YXIgdGltZXpvbmVPZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSk7XG4gIHZhciB1dGNEYXRlID0gc3ViTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSwgdGltZXpvbmVPZmZzZXQpO1xuICB2YXIgZm9ybWF0dGVyT3B0aW9ucyA9IHtcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSxcbiAgICB3ZWVrU3RhcnRzT246IHdlZWtTdGFydHNPbixcbiAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICBfb3JpZ2luYWxEYXRlOiBvcmlnaW5hbERhdGVcbiAgfTtcbiAgdmFyIHJlc3VsdCA9IGZvcm1hdFN0ci5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSAncCcgfHwgZmlyc3RDaGFyYWN0ZXIgPT09ICdQJykge1xuICAgICAgdmFyIGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJykubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICAvLyBSZXBsYWNlIHR3byBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyB3aXRoIG9uZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyXG4gICAgaWYgKHN1YnN0cmluZyA9PT0gXCInJ1wiKSB7XG4gICAgICByZXR1cm4gXCInXCI7XG4gICAgfVxuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwiJ1wiKSB7XG4gICAgICByZXR1cm4gY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZyk7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXR0ZXIodXRjRGF0ZSwgc3Vic3RyaW5nLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHApKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAnICsgZmlyc3RDaGFyYWN0ZXIgKyAnYCcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkge1xuICB2YXIgbWF0Y2hlZCA9IGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHApO1xuICBpZiAoIW1hdGNoZWQpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgXCInXCIpO1xufSIsICJleHBvcnQgY29uc3QgcG9pbnRzTm90ZU1hanVyaXR5ID0gMTAwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzTWFqdXJpdHkgPSAxMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlID0gNTAwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlID0gMjAwMDtcclxuZXhwb3J0IGNvbnN0IGF2YXRhckluaXRDb250ZW50ID0gIGAjIEF2YXRhclxyXG5cclxufCAgICAgICAgfCAgICAgfFxyXG58IC0tLS0tLSB8IC0tLSB8XHJcbnwgTGV2ZWwgIHwgMCAgICB8XHJcbnwgUG9pbnRzIHwgMCAgICB8XHJcbl5sZXZlbEFuZFBvaW50c1x0XHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFtFeHByaXJpZW5jZV1cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxyXG4gICAgZGF0YTogWzEwMDBdXHJcbnhNaW46IDBcclxueE1heDogMTAwMFxyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDQwJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG5pbmRleEF4aXM6IHlcclxueFRpdGxlOiBcInByb2dyZXNzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgICAgICAgICAgICAgfCAgICAgfCAgICAgICB8XHJcbnwgLS0tLS0tLS0tLS0gfCAtLS0gfCAtLS0tLSB8XHJcbnwgKipkYWlseSBOb3RlcyoqIHwgKjUwMEVQKiB8ICoqMC8yKiogfFxyXG5eZGFpbHlOb3Rlc0NoYWxsZW5nZVxyXG58ICB8ICAgICB8fFxyXG58IC0tLS0gfCAtLS0gfCAtLS0gfFxyXG58ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKiowLzcqKiAgIHxcclxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFtOb3Rlc11cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IGRheXMgZG9uZSBpbiBhIHJvd1xyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xyXG4gICAgZGF0YTogWzddXHJcbnhNaW46IDBcclxueE1heDogN1xyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDQwJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG5pbmRleEF4aXM6IHlcclxueFRpdGxlOiBcImRheXNcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCBMZXZlbCB8IENvdW50IHxcclxufCA6LS0tOiB8IDotLS06IHxcclxufCBNYWp1cml0eSA1IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNSwgJzUnLCAnNVx1MjdBMVx1RkUwRicsICc1XHUyQjA3XHVGRTBGJywgJzVcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSA0IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNCwgJzQnLCAnNFx1MjdBMVx1RkUwRicsICc0XHUyQjA3XHVGRTBGJywgJzRcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAzIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMywgJzMnLCAnM1x1MjdBMVx1RkUwRicsICczXHUyQjA3XHVGRTBGJywgJzNcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAyIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMiwgJzInLCAnMlx1MjdBMVx1RkUwRicsICcyXHUyQjA3XHVGRTBGJywgJzJcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAxIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMSwgJzEnLCAnMVx1MjdBMVx1RkUwRicsICcxXHUyQjA3XHVGRTBGJywgJzFcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAwIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMCwgJzAnLCAnMFx1MjdBMVx1RkUwRicsICcwXHUyQjA3XHVGRTBGJywgJzBcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxuXHJcblxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbMCwgMCwgMF1cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IG1vZGlmaWVkXHJcbiAgICBkYXRhOiBbMCwgMCwgMF1cclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA4MCAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbnlUaXRsZTogXCJOdW1iZXIgb2YgTm90ZXNcIlxyXG54VGl0bGU6IFwiTW9udGhzXCJcclxueE1pbjogMFxyXG5cXGBcXGBcXGBcclxuXkNoYXJ0TW9udGhcclxuXHJcblxyXG4jIyMgQmFkZ2VzXHJcbiMjIyMgYWNoaWV2ZWRcclxuXHJcblxyXG4jIyMjIG91dHN0YW5kaW5nXHJcbmxldmVsIDU6ICpFbmxpZ2h0ZW5lZCBOb3ZpY2UqXHJcbmxldmVsIDEwOiAqQ3VyaW91cyBDb25ub2lzc2V1cipcclxubGV2ZWwgMjA6ICpCcmFpbmlhYyBUcmFpbGJsYXplcipcclxubGV2ZWwgMjc6ICpTY2hvbGFybHkgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDM1OiAqSW5mbyBOaW5qYSBNYXN0ZXIqXHJcbmxldmVsIDQyOiAqV2lzZSBPd2wgR3VydSpcclxubGV2ZWwgNTA6ICpFaW5zdGVpbiBJbmNhcm5hdGUqXHJcbmxldmVsIDYwOiAqTWFzdGVybWluZCBTYWdlKlxyXG5sZXZlbCA3NTogKkNlcmVicmFsIE1hZXN0cm8qXHJcbmxldmVsIDgyOiAqWmVuIEtub3dsZWRnZSBLZWVwZXIqXHJcbmxldmVsIDkwOiAqR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkKlxyXG5sZXZlbCAxMDA6ICpPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZypcclxuXHJcblxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDUqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNSBvciBub3RlLW1hdHVyaXR5ID0gXCI1XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNCoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA0IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gM1xyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMyBvciBub3RlLW1hdHVyaXR5ID0gXCIzXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDJcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAxXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAxIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMFxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMCBvciBub3RlLW1hdHVyaXR5ID0gXCIwXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcbmA7XHJcbiIsICJpbXBvcnQgeyBURmlsZSwgQXBwLCB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb24oY2hhckNvdW50VG90YWw6IG51bWJlciwgbGF5ZXIyY291bnQ6IG51bWJlciwgbGF5ZXIzY291bnQ6IG51bWJlcik6IG51bWJlciB7XHJcblx0Y29uc3QgcGVyY2VudExheWVyMiA9IGxheWVyMmNvdW50ICogMTAwIC8gY2hhckNvdW50VG90YWw7XHJcbiAgICBjb25zdCBwZXJjZW50TGF5ZXIzID0gbGF5ZXIzY291bnQgKiAxMDAgLyBsYXllcjJjb3VudDtcclxuXHR2YXIgbGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdHZhciBsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0dmFyIG1hanVyaXR5ID0gMDtcclxuXHRpZiAoY2hhckNvdW50VG90YWwgPCAzMDAwKSB7XHJcblx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBOb3RlIGlzIG5vdCBsb25nIGVub3VnaCB0byBnZXQgaW50byBjYWxjdWxhdGlvbiBmb3IgbWFqdXJpdHkuIFRoZSB0b3RhbCBjaGFyYWN0ZXIgY291bnQgaXMgJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0aWYgKHBlcmNlbnRMYXllcjIgPT0gMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMTApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDIwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAzMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGF5ZXIzY291bnQgPT0gMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMTApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDIwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGF5ZXIybWFqdXJpdHkgPT0gMSAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMTtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gMiAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPj0gMyAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAoKGxheWVyMm1hanVyaXR5ID09IDMgfHwgbGF5ZXIybWFqdXJpdHkgPT0gNCkgJiYgKGxheWVyM21hanVyaXR5ID09IDQgfHwgbGF5ZXIzbWFqdXJpdHkgPT0gNSkpIHtcclxuXHRcdFx0bWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSA1ICYmIGxheWVyM21hanVyaXR5ID09IDUpIHtcclxuXHRcdFx0bWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0XHJcblx0Ly9jb25zb2xlLmxvZyhgbGF5ZXIybWFqdXJpdHk6ICR7bGF5ZXIybWFqdXJpdHl9IFxcdGxheWVyM21hanVyaXR5OiAke2xheWVyM21hanVyaXR5fSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBwZXJjZW50TGF5ZXIyOiAke3BlcmNlbnRMYXllcjJ9IFxcdHBlcmNlbnRMYXllcjM6ICR7cGVyY2VudExheWVyM30gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgY2hhckNvdW50VG90YWw6ICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0cmV0dXJuIG1hanVyaXR5O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZyk6IHsgY2hhckNvdW50OiBudW1iZXI7IGhpZ2hsaWdodGVkQ291bnQ6IG51bWJlcjsgYm9sZENvdW50OiBudW1iZXIgfSB7XHJcbiAgXHJcblx0Y29uc3QgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uID0gZmlsZW5hbWU7IC8vLnNsaWNlKDAsIC1maWxlbmFtZS5sZW5ndGgpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gZm9ybWF0dGluZyBzeW1ib2xzXHJcblx0Y29uc3Qgc3RyaXBwZWRDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9bKl9+YF0vZywgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBoZWFkaW5ncyB0aGF0IG1hdGNoIHRoZSBmaWxlbmFtZVxyXG5cdGNvbnN0IGhlYWRpbmdSZWdleCA9IC9eKCMrKVxccyguKikkL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MgPSBzdHJpcHBlZENvbnRlbnQucmVwbGFjZShoZWFkaW5nUmVnZXgsIChtYXRjaCwgcDEsIHAyKSA9PiB7XHJcblx0XHJcblx0XHQvLyBjb25zb2xlLmxvZyhgcDI6ICR7cDJ9YCk7XHJcblx0XHRpZiAocDIgPT09IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtYXRjaDtcclxuXHR9KTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRIZWFkaW5nczogJHtjb250ZW50V2l0aG91dEhlYWRpbmdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWV0YWRhdGEgYmxvY2tzIGZyb20gY291bnRcclxuXHRjb25zdCBtZXRhZGF0YVJlZ2V4ID0gL14tLS1bXFxzXFxTXSo/LS0tL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEgPSBjb250ZW50V2l0aG91dEhlYWRpbmdzLnJlcGxhY2UobWV0YWRhdGFSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TWV0YWRhdGE6ICR7Y29udGVudFdpdGhvdXRNZXRhZGF0YX1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlICN0YWdzIGZyb20gY291bnRcclxuXHRjb25zdCB0YWdSZWdleCA9IC8jW15cXHNdKy9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0VGFncyA9IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEucmVwbGFjZSh0YWdSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0VGFnczogJHtjb250ZW50V2l0aG91dFRhZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBsaW5rcyBhbmQgV2lraXBlZGlhLWxpbmtzIGZyb20gY291bnRcclxuXHRjb25zdCBsaW5rUmVnZXggPSAvXFxbLio/XFxdXFwoLio/XFwpfFxcW1xcWy4qP1xcXVxcXS9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TGlua3MgPSBjb250ZW50V2l0aG91dFRhZ3MucmVwbGFjZShsaW5rUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dExpbmtzOiAke2NvbnRlbnRXaXRob3V0TGlua3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBibGFuayBuZXdsaW5lc1xyXG5cdGNvbnN0IGZpbHRlcmVkQ29udGVudDogc3RyaW5nID0gY29udGVudFdpdGhvdXRMaW5rc1xyXG5cdC5zcGxpdCgnXFxuJykgLy8gU3BsaXQgdGhlIGNvbnRlbnQgaW50byBhbiBhcnJheSBvZiBsaW5lc1xyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpIC8vIEZpbHRlciBvdXQgbGluZXMgdGhhdCBhcmUgZW1wdHkgb3IgY29udGFpbiBvbmx5IHdoaXRlc3BhY2VcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICctLS0nKSAvLyByZW1vdmUgLS0tIG9uIHNpbmdsZSBsaW5lc1xyXG5cdC5qb2luKCdcXG4nKTsgLy8gSm9pbiB0aGUgcmVtYWluaW5nIGxpbmVzIGJhY2sgaW50byBhIHN0cmluZywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzXHJcblx0Ly8gY29uc29sZS5sb2coYGZpbHRlcmVkQ29udGVudDogJHtmaWx0ZXJlZENvbnRlbnR9YCk7XHJcblxyXG5cdC8vIENvdW50IHRoZSByZW1haW5pbmcgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGNoYXJDb3VudCA9IGZpbHRlcmVkQ29udGVudC5sZW5ndGg7XHJcblx0Ly8gY29uc29sZS5sb2coYGNoYXJDb3VudDogJHtjaGFyQ291bnR9YCk7XHJcblxyXG5cclxuXHQvLyBjYWxjdWxhdGUgTGF5ZXIgMiAmIDMgTGVuZ3RoXHJcblxyXG5cdC8vIENvdW50IHRoZSBoaWdobGlnaHRlZCBhbmQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0bGV0IGhpZ2hsaWdodGVkQ291bnQgPSAwO1xyXG5cdGxldCBib2xkQ291bnQgPSAwO1xyXG4gIFxyXG5cdHZhciBsYXllcjJleGNsdWRlID0gJz0nXHJcblx0dmFyIGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0Ly8gdG8gaGF2ZSB0aGUgcmVnIGV4IGNvcnJlY3QuIG90aGVyd2lzZSBpdCB3aWxsIGdldCBzdHVjIHdpdGggKiouXHJcblx0aWYobGF5ZXIzID09ICcqKicpe1xyXG5cdFx0bGF5ZXIzID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdH1cclxuXHRpZihsYXllcjIgPT0gJyoqJyl7XHJcblx0XHRsYXllcjIgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnPSdcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnXFxcXConXHJcblx0fVxyXG4gIFx0XHJcblxyXG5cdGNvbnN0IGhpZ2hsaWdodFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjJ9W14ke2xheWVyMmV4Y2x1ZGV9XSske2xheWVyMn1gLCBcImdcIik7XHJcbiAgICBjb25zdCBib2xkUmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyM31bXiR7bGF5ZXIzZXhjbHVkZX1dKyR7bGF5ZXIzfWAsIFwiZ1wiKTtcclxuICBcclxuXHQvLyBDb3VudCBoaWdobGlnaHRlZCBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgaGlnaGxpZ2h0ZWRNYXRjaGVzID0gY29udGVudC5tYXRjaChoaWdobGlnaHRSZWdleCk7XHJcblx0aWYgKGhpZ2hsaWdodGVkTWF0Y2hlcykge1xyXG5cdCAgaGlnaGxpZ2h0ZWRDb3VudCA9IGhpZ2hsaWdodGVkTWF0Y2hlcy5qb2luKFwiXCIpLmxlbmd0aCAtIChoaWdobGlnaHRlZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJz09J1xyXG5cdCAgLy8gZmlyc3QgdGFrZSB0aGUgbGF5ZXIyIChoaWdobGlnaHRlZENvdW50KSBhbmQgcnVuIG9uIHRoaXMgdGhlICdib2xkUmVnZXgnXHJcblx0ICAvLyBDb3VudCBib2xkIGNoYXJhY3RlcnNcclxuXHQgIGNvbnN0IGxheWVyMlN0cmluZyA9IGhpZ2hsaWdodGVkTWF0Y2hlcy5qb2luKFwiXCIpO1xyXG5cdCAgY29uc3QgYm9sZE1hdGNoZXMgPSBsYXllcjJTdHJpbmcubWF0Y2goYm9sZFJlZ2V4KTtcclxuXHQgIGlmIChib2xkTWF0Y2hlcykge1xyXG5cdCAgICBib2xkQ291bnQgPSBib2xkTWF0Y2hlcy5qb2luKFwiXCIpLmxlbmd0aCAtIChib2xkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnKionXHJcblx0ICB9XHJcblx0fVxyXG4gIFxyXG5cdFxyXG5cdFxyXG4gIFxyXG5cdHJldHVybiB7IGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50IH07XHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZXZlbE9mTWF0dXJpdHkobm90ZUxlbmd0aDogbnVtYmVyLCBsZW5ndGhPZlRpdGxlOiBudW1iZXIsIElubGlua3M6IG51bWJlciwgb3V0Z29pbmdMaW5rczogbnVtYmVyLCBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBub3RlTGVuZ3RoOiAke25vdGVMZW5ndGh9XFx0bGVuZ3RoT2ZUaXRsZTogJHtsZW5ndGhPZlRpdGxlfVxcdElubGlua3M6ICR7SW5saW5rc31cXHRvdXRnb2luZ0xpbmtzOiAke291dGdvaW5nTGlua3N9YClcclxuXHRcclxuXHQvLyBkZWNpZGUgaWYgbm90ZUxlbmd0aC1tYWp1cml0eSBvciBwcm9ncmVzc2l2ZVN1bS1tYWp1cml0eSBzaGFsbCBiZSB1c2VkXHJcblx0dmFyIGxlbmd0aE1hanVyaXR5ID0gMDtcclxuXHRpZihub3RlTGVuZ3RoID49IHByb2dyZXNzaXZlU3VtTWFqdXJpdHkpIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gbm90ZUxlbmd0aDtcclxuXHR9IGVsc2Uge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5O1xyXG5cdH1cclxuXHRcclxuXHRjb25zdCB0b3RhbFdlaWdodCA6IG51bWJlciA9IGxlbmd0aE1hanVyaXR5ICsgbGVuZ3RoT2ZUaXRsZSArIElubGlua3MgKyBvdXRnb2luZ0xpbmtzO1xyXG5cdGNvbnN0IGF2ZXJhZ2VXZWlnaHQgPSB0b3RhbFdlaWdodCAvIDU7XHJcblx0Ly8gY29uc29sZS5sb2coYHRvdGFsV2VpZ2h0OiAke3RvdGFsV2VpZ2h0fVxcdGF2ZXJhZ2VXZWlnaHQ6ICR7YXZlcmFnZVdlaWdodH1gKVxyXG5cdGlmIChhdmVyYWdlV2VpZ2h0IDwgMC41KSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMSkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDIpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMy41KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gNCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlT3V0bGlua3Mob3V0bGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG91dGxpbmtzOiAke291dGxpbmtzfWApXHJcblx0aWYgKG91dGxpbmtzIDwgMikge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDMpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA1KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgOSkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTIpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUlubGlua3MobnVtSW5saW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvL3ZhciBwcm96ZW50SW5saW5rcyA9IG51bUlubGlua3MgKiAxMDAgLyBudW1BbGxGaWxlcztcclxuXHQvL2NvbnNvbGUubG9nKGBudW1JbmxpbmtzOiAke251bUlubGlua3N9XFx0bnVtQWxsRmlsZXM6ICR7bnVtQWxsRmlsZXN9XFx0cHJvemVudElubGlua3M6ICR7cHJvemVudElubGlua3N9YClcclxuXHQvKmlmIChwcm96ZW50SW5saW5rcyA8IDAuMDA1IHx8IHByb3plbnRJbmxpbmtzID4gMC4xKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgKi8gaWYgKG51bUlubGlua3MgPT0gMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgNCkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgOCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDE2KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPj0gMTYgJiYgbnVtSW5saW5rcyA8IDUwMCApIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZURpcmVjdGlvbihyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRsZXQgcmF0aW5nID0gXCJcIlxyXG5cdGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPiByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDdcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA2XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA9PSByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTI3QTFcdUZFMEZcIlxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlwiXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIGlmIChmaWxlbmFtZS5sZW5ndGggPCAzMCkge1xyXG5cdHJldHVybiAwO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgODApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDEwMCkge1xyXG5cdHJldHVybiAzO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTUwKSB7XHJcblx0cmV0dXJuIDU7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxOTApIHtcclxuXHRyZXR1cm4gNDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDIxMCkge1xyXG5cdHJldHVybiAyO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjUwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIHtcclxuXHRyZXR1cm4gMDtcclxuICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU5vdGVMZW5ndGgoY29udGVubGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGlmIChjb250ZW5sZW5ndGggPCAyMDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgNTUwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEwMDApIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTIwMCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyMDAwKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDI1MDApIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMzAwMCkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1iZXJPZk91dGxpbmtzKGFjdGl2ZUZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuXHQvLyBjb25zdCBhY3RpdmVGaWxlOiBURmlsZSB8IG51bGwgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRpZiAoIWFjdGl2ZUZpbGUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHRjb25zdCBpbmxpbmtzID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGFjdGl2ZUZpbGUpPy5saW5rcztcclxuXHRyZXR1cm4gaW5saW5rcyA/IE9iamVjdC5rZXlzKGlubGlua3MpLmxlbmd0aCA6IDA7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgXHJcblx0Y29uc3QgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uID0gZmlsZW5hbWU7IC8vLnNsaWNlKDAsIC1maWxlbmFtZS5sZW5ndGgpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gZm9ybWF0dGluZyBzeW1ib2xzXHJcblx0Y29uc3Qgc3RyaXBwZWRDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9bKl9+YF0vZywgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBoZWFkaW5ncyB0aGF0IG1hdGNoIHRoZSBmaWxlbmFtZVxyXG5cdGNvbnN0IGhlYWRpbmdSZWdleCA9IC9eKCMrKVxccyguKikkL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MgPSBzdHJpcHBlZENvbnRlbnQucmVwbGFjZShoZWFkaW5nUmVnZXgsIChtYXRjaCwgcDEsIHAyKSA9PiB7XHJcblx0XHJcblx0XHQvLyBjb25zb2xlLmxvZyhgcDI6ICR7cDJ9YCk7XHJcblx0XHRpZiAocDIgPT09IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtYXRjaDtcclxuXHR9KTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRIZWFkaW5nczogJHtjb250ZW50V2l0aG91dEhlYWRpbmdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWV0YWRhdGEgYmxvY2tzIGZyb20gY291bnRcclxuXHRjb25zdCBtZXRhZGF0YVJlZ2V4ID0gL14tLS1bXFxzXFxTXSo/LS0tL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEgPSBjb250ZW50V2l0aG91dEhlYWRpbmdzLnJlcGxhY2UobWV0YWRhdGFSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TWV0YWRhdGE6ICR7Y29udGVudFdpdGhvdXRNZXRhZGF0YX1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlICN0YWdzIGZyb20gY291bnRcclxuXHRjb25zdCB0YWdSZWdleCA9IC8jW15cXHNdKy9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0VGFncyA9IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEucmVwbGFjZSh0YWdSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0VGFnczogJHtjb250ZW50V2l0aG91dFRhZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBsaW5rcyBhbmQgV2lraXBlZGlhLWxpbmtzIGZyb20gY291bnRcclxuXHRjb25zdCBsaW5rUmVnZXggPSAvXFxbLio/XFxdXFwoLio/XFwpfFxcW1xcWy4qP1xcXVxcXS9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TGlua3MgPSBjb250ZW50V2l0aG91dFRhZ3MucmVwbGFjZShsaW5rUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dExpbmtzOiAke2NvbnRlbnRXaXRob3V0TGlua3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBibGFuayBuZXdsaW5lc1xyXG5cdGNvbnN0IGZpbHRlcmVkQ29udGVudDogc3RyaW5nID0gY29udGVudFdpdGhvdXRMaW5rc1xyXG5cdC5zcGxpdCgnXFxuJykgLy8gU3BsaXQgdGhlIGNvbnRlbnQgaW50byBhbiBhcnJheSBvZiBsaW5lc1xyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpIC8vIEZpbHRlciBvdXQgbGluZXMgdGhhdCBhcmUgZW1wdHkgb3IgY29udGFpbiBvbmx5IHdoaXRlc3BhY2VcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICctLS0nKSAvLyByZW1vdmUgLS0tIG9uIHNpbmdsZSBsaW5lc1xyXG5cdC5qb2luKCdcXG4nKTsgLy8gSm9pbiB0aGUgcmVtYWluaW5nIGxpbmVzIGJhY2sgaW50byBhIHN0cmluZywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzXHJcblx0Ly8gY29uc29sZS5sb2coYGZpbHRlcmVkQ29udGVudDogJHtmaWx0ZXJlZENvbnRlbnR9YCk7XHJcblxyXG5cdC8vIENvdW50IHRoZSByZW1haW5pbmcgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGNoYXJDb3VudCA9IGZpbHRlcmVkQ29udGVudC5sZW5ndGg7XHJcblx0Ly8gY29uc29sZS5sb2coYGNoYXJDb3VudDogJHtjaGFyQ291bnR9YCk7XHJcblxyXG5cdHJldHVybiBjaGFyQ291bnQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rc19zaW5nbGUoZmlsZV9wYXRoOiBzdHJpbmcsIHZhdWx0X3BhdGg6IHN0cmluZyk6IG51bWJlciB7XHJcblx0Ly8gR2V0IHRoZSBmaWxlbmFtZSBhbmQgZGlyZWN0b3J5IG9mIHRoZSBmaWxlIHdlJ3JlIGNvdW50aW5nIGxpbmtzIHRvXHJcblx0Y29uc3QgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVfcGF0aCk7XHJcblx0Y29uc3QgZGlyZWN0b3J5ID0gcGF0aC5kaXJuYW1lKGZpbGVfcGF0aCk7XHJcblxyXG5cdC8vIENyZWF0ZSBhIHNldCB0byBob2xkIGFsbCB0aGUgZmlsZXMgdGhhdCBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdGNvbnN0IGxpbmtpbmdfZmlsZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xyXG5cclxuXHQvLyBSZWN1cnNpdmVseSBzZWFyY2ggZm9yIGZpbGVzIGluIHRoZSB2YXVsdCBkaXJlY3RvcnkgdGhhdCBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdGNvbnN0IHdhbGtTeW5jID0gKGRpcjogc3RyaW5nLCBmaWxlbGlzdDogc3RyaW5nW10pID0+IHtcclxuXHRcdGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoZGlyKTtcclxuXHRcdGZpbGVsaXN0ID0gZmlsZWxpc3QgfHwgW107XHJcblx0XHRmaWxlcy5mb3JFYWNoKChmaWxlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0aWYgKGZzLnN0YXRTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpKS5pc0RpcmVjdG9yeSgpKSB7XHJcblx0XHRcdFx0ZmlsZWxpc3QgPSB3YWxrU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgZmlsZWxpc3QpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdC8vIElnbm9yZSBub24tbWQgZmlsZXMgYW5kIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRpZiAoIWZpbGUuZW5kc1dpdGgoXCIubWRcIikgfHwgZmlsZSA9PT0gZmlsZW5hbWUpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFJlYWQgdGhlIGZpbGUgYW5kIGxvb2sgZm9yIGxpbmtzIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIFwidXRmLThcIik7XHJcblx0XHRcdFx0ZGF0YS5zcGxpdCgnXFxuJykuZm9yRWFjaCgobGluZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAobGluZS5pbmNsdWRlcyhgW1ske2ZpbGVuYW1lLnNsaWNlKDAsIC0zKX1dXWApIHx8IGxpbmUuaW5jbHVkZXMoYFske2ZpbGVuYW1lLnNsaWNlKDAsIC0zKX1dYCkpIHtcclxuXHRcdFx0XHRcdFx0Ly8gV2UgZm91bmQgYSBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZSFcclxuXHRcdFx0XHRcdFx0bGlua2luZ19maWxlcy5hZGQocGF0aC5yZWxhdGl2ZShkaXJlY3RvcnksIHBhdGguam9pbihkaXIsIGZpbGUpKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIGZpbGVsaXN0O1xyXG5cdH07XHJcblxyXG5cdHdhbGtTeW5jKHZhdWx0X3BhdGgsIFtdKTtcclxuXHJcblx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgYXJlIG1lbnRpb25pbmcgdGhlIGlucHV0IGZpbGVcclxuXHRyZXR1cm4gbGlua2luZ19maWxlcy5zaXplO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3MoZmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG4gICAgY29uc3QgeyBhcHA6IHsgbWV0YWRhdGFDYWNoZTogeyByZXNvbHZlZExpbmtzIH0gfSB9ID0gdGhpcztcclxuICAgIGNvbnN0IHsgcGF0aCB9ID0gZmlsZTtcclxuXHJcbiAgICBjb25zdCBzdW1JbmxpbmtzID0gT2JqZWN0LnZhbHVlcyhyZXNvbHZlZExpbmtzKVxyXG4gICAgICAgIC5tYXAoKHZhbDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSkgPT4gdmFsW3BhdGhdID8/IDApXHJcbiAgICAgICAgLnJlZHVjZSgobGVmdCwgcmlnaHQpID0+IGxlZnQgKyByaWdodCwgMCk7XHJcblxyXG4gICAgcmV0dXJuIHN1bUlubGlua3M7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZUNvdW50TWFwID0gYXN5bmMgKGFwcDogQXBwLCBleGNsdWRlVGFnOiBzdHJpbmcsIGV4Y2x1ZGVGb2xkZXI6IHN0cmluZyk6IFByb21pc2U8TWFwPHN0cmluZywgbnVtYmVyPj4gPT4ge1xyXG5cclxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHJcblx0XHJcblx0Ly8gZmlsZXMgd2l0aCB0aGlzICN0YWdzIGluIHRvIGlnbm9yZVxyXG5cdGxldCBleGNsdWRlZFN1YnN0cmluZ3MgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVUYWcgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBleGNsdWRlVGFnLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRcclxuXHJcblx0Ly8gZm9sZGVycyB0byBpZ25vcmUgLm1kLWZpbGVzIGluXHJcblx0bGV0IGV4Y2x1ZGVkRm9sZGVycyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZUZvbGRlciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IGV4Y2x1ZGVGb2xkZXIuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdGV4Y2x1ZGVkRm9sZGVycy5wdXNoKCcub2JzaWRpYW4nLCAnLnRyYXNoJyk7IC8vIGhhcmRjb2RlIHRoZSBiYXNpYyBmb2xkZXJzXHJcblx0XHJcbiAgICBjb25zdCBmaWxlQ291bnRNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cclxuXHRcdGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTtcclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcblxyXG5cdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblxyXG4gICAgICAgIGlmICghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuICAgICAgICB9XHJcblx0XHRcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsZUNvdW50TWFwO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlTWFwID0gYXN5bmMgKGFwcDogQXBwLCBleGNsdWRlVGFnOiBzdHJpbmcsIGV4Y2x1ZGVGb2xkZXI6IHN0cmluZyk6IFByb21pc2U8VEZpbGVbXT4gPT4ge1xyXG5cclxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHJcblx0Ly8gZmlsZXMgd2l0aCB0aGlzICN0YWdzIGluIHRvIGlnbm9yZVxyXG5cdGxldCBleGNsdWRlZFN1YnN0cmluZ3MgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVUYWcgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBleGNsdWRlVGFnLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZFN1YnN0cmluZ3M6ICR7ZXhjbHVkZWRTdWJzdHJpbmdzfWApXHJcblx0Ly8gZm9sZGVycyB0byBpZ25vcmUgLm1kLWZpbGVzIGluXHJcblx0bGV0IGV4Y2x1ZGVkRm9sZGVycyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZUZvbGRlciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IGV4Y2x1ZGVGb2xkZXIuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdGV4Y2x1ZGVkRm9sZGVycy5wdXNoKCcub2JzaWRpYW4nLCAnLnRyYXNoJyk7IC8vIGhhcmRjb2RlIHRoZSBiYXNpYyBmb2xkZXJzXHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRGb2xkZXJzOiAke2V4Y2x1ZGVkRm9sZGVyc31gKVx0XHJcbiAgICBsZXQgZmlsZUFycmF5OiBURmlsZVtdID0gW107XHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cclxuICAgICAgICBjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdC8vY29uc29sZS5sb2coYGZpbGUucGF0aDogJHtmaWxlLnBhdGh9YClcclxuXHRcdGlmICgoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgfHwgZXhjbHVkZVRhZy5sZW5ndGggPT09IDApICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBmaWxlICR7ZmlsZX0gZ2V0J3MgYWRkZWQuYClcclxuXHRcdFx0ZmlsZUFycmF5LnB1c2goZmlsZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlsZUFycmF5O1xyXG59O1xyXG4iLCAiaW1wb3J0IHtURmlsZX0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdENyZWF0ZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdENyZWF0ZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5jdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcbiAgXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RNb2RpZmllZEZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0TW9kaWZpZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0TW9kaWZpZWRGaWxlLnN0YXQubXRpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RNb2RpZmllZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RNb2RpZmllZEZpbGU7XHJcbn0gIFxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3REYXRlRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0XHRpZiAoZmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RDcmVhdGVkRmlsZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtb250aHNCZXR3ZWVuKHN0YXJ0TW9udGg6IERhdGUsIGVuZE1vbnRoOiBEYXRlKTogbnVtYmVyIHtcclxuXHRsZXQgbW9udGhzID0gKGVuZE1vbnRoLmdldE1vbnRoKCkgLSBzdGFydE1vbnRoLmdldE1vbnRoKCkpICsgMTtcclxuXHRpZiAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSA+IHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkge1xyXG5cdFx0bW9udGhzICs9IChlbmRNb250aC5nZXRGdWxsWWVhcigpIC0gc3RhcnRNb250aC5nZXRGdWxsWWVhcigpKSoxMjtcclxuXHR9XHJcblx0cmV0dXJuIG1vbnRocztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvbkRhdGVzKGZpbGVzOiBURmlsZVtdKTogQXJyYXk8RGF0ZT4ge1xyXG5cdGNvbnN0IGNyZWF0aW9uRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XHJcbiAgXHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRjcmVhdGlvbkRhdGVzLnB1c2gobmV3IERhdGUoZmlsZS5zdGF0LmN0aW1lKSk7XHJcblx0fVxyXG4gIFxyXG5cdHJldHVybiBjcmVhdGlvbkRhdGVzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGlmaWNhdGlvbkRhdGVzKGZpbGVzOiBURmlsZVtdKTogQXJyYXk8RGF0ZT4ge1xyXG5cdGNvbnN0IGNyZWF0aW9uRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XHJcbiAgXHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRjcmVhdGlvbkRhdGVzLnB1c2gobmV3IERhdGUoZmlsZS5zdGF0Lm10aW1lKSk7XHJcblx0fVxyXG4gIFxyXG5cdHJldHVybiBjcmVhdGlvbkRhdGVzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0Rm9ybWF0KHlfYXhpczogc3RyaW5nLCBjb3VudHNTdHJpbmdNb2Q6IHN0cmluZywgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRsZXQgbW9uYXRzYmVncmVuenVuZyA9IG51bGxcclxuXHRpZiAoY2hhcnRSZWR1emllcnVuZ01vbmF0ZSA9PSAwKXtcclxuXHRcdG1vbmF0c2JlZ3Jlbnp1bmcgPSAwXHJcblx0fSBlbHNlIHtcclxuXHRcdG1vbmF0c2JlZ3Jlbnp1bmcgPSBjb3VudHNTdHJpbmdNb2Quc3BsaXQoJywnKS5sZW5ndGggLSBjaGFydFJlZHV6aWVydW5nTW9uYXRlXHJcblx0fVxyXG5cdFxyXG5cdC8vY29uc3QgbW9uYXRzYmVncmVuenVuZyA9IGxlbmd0aGNvdW50c1N0cmluZ0NyZWF0ZSAtIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdHJldHVybiBcImBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbXCIgKyB5X2F4aXMgKyBcIl1cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBtb2RpZmllZFxcbiAgICBkYXRhOiBbXCIgKyBjb3VudHNTdHJpbmdNb2QgKyBcIl1cXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogODAgJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxueVRpdGxlOiBcXFwiTnVtYmVyIG9mIE5vdGVzXFxcIlxcbnhUaXRsZTogXFxcIk1vbnRoc1xcXCJcXG54TWluOiBcIiArIG1vbmF0c2JlZ3Jlbnp1bmcgKyBcIlxcbmBgYFwiO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUNoYXJ0Q29udGVudCAoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgbmV3Q29udGVudDogc3RyaW5nKSB7XHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0aWYgKGxpbmUgPT09IFwiXkNoYXJ0TW9udGhcIikge1xyXG5cdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRpZiAocmVmZXJlbmNlICE9IG51bGwpe1xyXG5cdFx0ZW5kID0gcmVmZXJlbmNlO1xyXG5cdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAxOTtcclxuXHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3Q29udGVudCwgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgICBsZXZlbDogc3RyaW5nO1xyXG4gIH1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lmUmVjZWl2ZUFCYWRnZShsZXZlbE9sZDogbnVtYmVyLCBsZXZlbE5ldzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gIGxldCByZWNlaXZlQmFkZ2UgPSBmYWxzZVxyXG4gIGZvciAobGV0IGk9MDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKXtcclxuICAgIGlmIChsZXZlbE9sZCA8IGJhZGdlTGV2ZWxzW2ldICYmIGxldmVsTmV3ID49IGJhZGdlTGV2ZWxzW2ldKXtcclxuICAgICAgcmVjZWl2ZUJhZGdlID0gdHJ1ZVxyXG4gICAgfSBcclxuICB9XHJcbiAgcmV0dXJuIHJlY2VpdmVCYWRnZVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyLCBpbmZvcm06IGJvb2xlYW4pOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiwgbGV2ZWw6IFwibGV2ZWwgNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiAsIGxldmVsOiBcImxldmVsIDEwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiAsIGxldmVsOiBcImxldmVsIDI3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2UgT3dsIEd1cnVcIiwgZGVzY3JpcHRpb246IFwiV2hvby1ob28hIFlvdSd2ZSBhY2hpZXZlZCAnV2lzZSBPd2wgR3VydScgc3RhdHVzLiBZb3VyIHdpc2RvbSBpcyBsZWdlbmRhcnksIGFuZCB5b3VyIGhvb3RzIG9mIGtub3dsZWRnZSBlY2hvIHRocm91Z2ggdGhlIGZvcmVzdCBvZiBpZ25vcmFuY2UhXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFaW5zdGVpbiBJbmNhcm5hdGVcIiwgZGVzY3JpcHRpb246IFwiRXVyZWthISBZb3UndmUgYmVjb21lIGFuICdFaW5zdGVpbiBJbmNhcm5hdGUsJyBwdXNoaW5nIHRoZSBib3VuZGFyaWVzIG9mIHVuZGVyc3RhbmRpbmcgYW5kIGJlbmRpbmcgdGhlIGZhYnJpYyBvZiBrbm93bGVkZ2UgdG8geW91ciB3aWxsIVwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTWFzdGVybWluZCBTYWdlXCIsIGRlc2NyaXB0aW9uOiBcIk1hZ25pZmljZW50ISBZb3UndmUgYXNjZW5kZWQgdG8gdGhlIHJhbmsgb2YgJ01hc3Rlcm1pbmQgU2FnZSwnIGd1aWRpbmcgdGhlIHJpdmVycyBvZiBpbmZvcm1hdGlvbiBhbmQgZW5saWdodGVuaW5nIGFsbCB3aG8gc2VlayB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDZXJlYnJhbCBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZpc3NpbW8hIFlvdSdyZSBub3cgYSAnQ2VyZWJyYWwgTWFlc3RybywnIGNvbmR1Y3RpbmcgdGhlIHN5bXBob255IG9mIGtub3dsZWRnZSB3aXRoIHRoZSBmaW5lc3NlIG9mIGEgdmlydHVvc28gY29uZHVjdG9yIVwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiWmVuIEtub3dsZWRnZSBLZWVwZXJcIiwgZGVzY3JpcHRpb246IFwiU2VyZW5pdHkgYWNoaWV2ZWQhIEFzIGEgJ1plbiBLbm93bGVkZ2UgS2VlcGVyLCcgeW91IG1haW50YWluIGEgdHJhbnF1aWwgbWluZCB3aGlsZSBtYW5hZ2luZyB2YXN0IHBvb2xzIG9mIGtub3dsZWRnZSB3aXRoIGdyYWNlIGFuZCBwb2lzZS5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZFwiLCBkZXNjcmlwdGlvbjogXCJBbGwgaGFpbCB0aGUgJ0dyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCEnIFlvdSB3aWVsZCB0aGUga25vd2xlZGdlIG9mIGFnZXMgYW5kIGhvbGQgdGhlIGtleXMgdG8gdW5sb2NrIHRoZSBnYXRlcyBvZiB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZ1wiLCBkZXNjcmlwdGlvbjogXCJDb25ncmF0dWxhdGlvbnMsIG9oIHdpc2Ugb25lISBZb3UndmUgYXR0YWluZWQgdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgZW5saWdodGVubWVudCBhcyB0aGUgJ09tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nLicgWW91ciB1bmRlcnN0YW5kaW5nIGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgd2lzZG9tIGlzIGFzIHZhc3QgYXMgdGhlIGNvc21vcyBpdHNlbGYhXCIsIGxldmVsOiBcImxldmVsIDEwMFwiICB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNbaW5kZXhdXHJcbiAgfVxyXG4gIFxyXG5cclxuXHJcbiAgZXhwb3J0ICBmdW5jdGlvbiBnZXRCYWRnZUZvckluaXRMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzAsIDMsIDcsIDE1LCAyMywgMzAsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lc0luaXQ6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIFNlZWtlciBJbml0aWF0ZVwiLCBkZXNjcmlwdGlvbjogXCJXZWxjb21lIHRvIHRoZSBqb3VybmV5IG9mIGtub3dsZWRnZSEgQXMgYSAnTG9yZSBTZWVrZXIgSW5pdGlhdGUsJyB5b3UndmUgdGFrZW4geW91ciBmaXJzdCBzdGVwcyBpbnRvIHRoZSB3b3JsZCBvZiBvcmdhbml6ZWQgd2lzZG9tLiBZb3VyIHF1ZXN0IGhhcyBqdXN0IGJlZ3VuLCBhbmQgd2l0aCBlYWNoIG5vdGUgeW91IG1ha2UsIHlvdSBsYXkgdGhlIGZvdW5kYXRpb24gZm9yIGEgZnV0dXJlIHJpY2ggd2l0aCBpbnNpZ2h0cyBhbmQgdW5kZXJzdGFuZGluZy4gWW91ciBqb3VybmV5IHN0YXJ0cyBoZXJlLCBhbmQgdGhlIHBhdGggYWhlYWQgaXMgZmlsbGVkIHdpdGggcG90ZW50aWFsIGFuZCBkaXNjb3ZlcnkuXCIsIGxldmVsOiBcImxldmVsIDFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBBcHByZW50aWNlXCIsIGRlc2NyaXB0aW9uOiBcIllvdSd2ZSBoaXQgdGhlIGdyb3VuZCBydW5uaW5nIHdpdGggeW91ciBleGlzdGluZyBrbm93bGVkZ2UgdHJlYXN1cmVzISBZb3UncmUgYWxyZWFkeSBhbiAnTG9yZSBBcHByZW50aWNlLCcgYXJtZWQgd2l0aCBhIHdlYWx0aCBvZiB3aXNkb20gYW5kIHJlYWR5IHRvIHNoYXBlIGl0IGZ1cnRoZXIuXCIsIGxldmVsOiBcImxldmVsIDNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2F2dnkgU2Nob2xhclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgZ2l2ZW4geW91IGEgaGVhZCBzdGFydCEgWW91J3JlIG5vdyBhICdTYXZ2eSBTY2hvbGFyLCcgY29uZmlkZW50bHkgZGl2aW5nIGludG8gdGhlIHNlYSBvZiBpbmZvcm1hdGlvbiB3aXRoIGEgdHJlYXN1cmUgdHJvdmUgb2YgaW5zaWdodHMuXCIgLCBsZXZlbDogXCJsZXZlbCA3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhZ2UncyBGb3VuZGF0aW9uXCIsIGRlc2NyaXB0aW9uOiBcIkJ1aWxkaW5nIHVwb24geW91ciBwcmUtZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSBlc3RhYmxpc2hpbmcgdGhlICdTYWdlJ3MgRm91bmRhdGlvbicgZm9yIGFuIGV2ZW4gZ3JhbmRlciBlZGlmaWNlIG9mIGtub3dsZWRnZS4gWW91ciBncm91bmR3b3JrIGlzIGltcHJlc3NpdmUhXCIgLCBsZXZlbDogXCJsZXZlbCAxNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNkb20gU2VlZGxpbmdcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG51cnR1cmVkIHRoZSBncm93dGggb2YgYSAnV2lzZG9tIFNlZWRsaW5nLicgWW91J3JlIGN1bHRpdmF0aW5nIHlvdXIgZ2FyZGVuIG9mIGtub3dsZWRnZSB3aXRoIGNhcmUgYW5kIHBhdGllbmNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgMjNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiUHJvZGlnaW91cyBQcmVwYXJlclwiLCBkZXNjcmlwdGlvbjogXCJUaGFua3MgdG8geW91ciBwcmlvciBlZmZvcnRzLCB5b3UncmUgYSAnUHJvZGlnaW91cyBQcmVwYXJlciwnIHN0YW5kaW5nIHRhbGwgYW1vbmcgeW91ciBub3RlcyBhbmQgcmVhZHkgdG8gY29ucXVlciBuZXcgcmVhbG1zIG9mIHVuZGVyc3RhbmRpbmcuXCIgLCBsZXZlbDogXCJsZXZlbCAzMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFcGljIEVwaXBoYW55IEV4cGxvcmVyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgcGFzdCBub3RlcyBoYXZlIGxlZCB5b3UgdG8gdGhlIGdyYW5kICdFcGljIEVwaXBoYW55IEV4cGxvcmVyJyBzdGF0dXMhIFlvdSd2ZSBhbHJlYWR5IGJlZW4gZG93biBhIGZldyByYWJiaXQgaG9sZXMgYW5kIGNvbWUgb3V0IHdpdGggZGF6emxpbmcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEx1bWluYXJ5XCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBpbGx1bWluYXRpbmcgeW91ciBwYXRoLCB5b3UndmUgYmVjb21lIGEgJ0xvcmUgTHVtaW5hcnksJyBzaGluaW5nIGxpZ2h0IG9uIHRoZSBteXN0ZXJpZXMgb2YgdGhlIHVuaXZlcnNlLCBvbmUgaWRlYSBhdCBhIHRpbWUuXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY3JpYmUgb2YgdGhlIEFuY2llbnRzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgbWFzdGVyeSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFuYWdlbWVudCBoYXMgZWxldmF0ZWQgeW91IHRvIHRoZSBlc3RlZW1lZCByYW5rIG9mIHRoZSAnU2NyaWJlIG9mIHRoZSBBbmNpZW50cy4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSB0cmFuc2Zvcm1lZCBpbnRvIHRyZWFzdXJlcywgYnJpZGdpbmcgdGhlIGdhcCBiZXR3ZWVuIG9sZCB3aXNkb20gYW5kIG5ldyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV1cmVrYSBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkFybWVkIHdpdGggeW91ciBleGlzdGluZyBub3RlcywgeW91J3JlIHRoZSAnRXVyZWthIE1hZXN0cm8sJyBjb21wb3NpbmcgYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSB3aXRoIHRoZSBtZWxvZHkgb2YgZGlzY292ZXJ5LlwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2hyb25pY2xlcyBDaGFtcGlvblwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgc3RhbmRpbmcgYXMgYSB0ZXN0YW1lbnQsIHlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgaWxsdXN0cmlvdXMgJ0Nocm9uaWNsZXMgQ2hhbXBpb24nIGxldmVsLiBZb3VyIGpvdXJuZXkgdGhyb3VnaCB0aW1lJ3MgdGFwZXN0cnkgaGFzIGJyb3VnaHQgZm9ydGggYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSBwYXN0IGFuZCBwcmVzZW50LlwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyXCIsIGRlc2NyaXB0aW9uOiBcIkFzICdUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXIsJyB5b3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFwcGVkIG91dCB1bmNoYXJ0ZWQgdGVycml0b3JpZXMgb2YgdW5kZXJzdGFuZGluZy4gWW91ciBjdXJpb3NpdHkga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciBub3RlcyBhcmUgdGhlIGNvbXBhc3MgZ3VpZGluZyB5b3VyIGV4cGxvcmF0aW9uLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU3VsdGFuIG9mIFN5bnRoZXNpc1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFkZSB5b3UgdGhlICdTdWx0YW4gb2YgU3ludGhlc2lzLicgWW91J3JlIHRoZSBtYXN0ZXIgd2VhdmVyLCB0aHJlYWRpbmcgdG9nZXRoZXIgdGhyZWFkcyBvZiBpbmZvcm1hdGlvbiBpbnRvIGEgcmljaCB0YXBlc3RyeSBvZiBpbnNpZ2h0LlwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXRlcm5hbCBBcmNoaXZpc3RcIiwgZGVzY3JpcHRpb246IFwiQXQgdGhlIHBpbm5hY2xlIG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYXN0ZXJ5LCB5b3UncmUgbm93IHJldmVyZWQgYXMgdGhlICdFdGVybmFsIEFyY2hpdmlzdC4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMsIGNhcmVmdWxseSBjdXJhdGVkIGFuZCBudXJ0dXJlZCwgc3RhbmQgYXMgaW1tb3J0YWwgYmVhY29ucywgZ3VpZGluZyBzZWVrZXJzIHRocm91Z2ggdGhlIGxhYnlyaW50aCBvZiBrbm93bGVkZ2UgYWNyb3NzIGFnZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAxMDBcIiB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNJbml0W2luZGV4XVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIEV4YW1wbGUgdXNhZ2U6XHJcbiAgLy8gY29uc3QgY3VycmVudExldmVsID0gNDI7IC8vIFJlcGxhY2UgdGhpcyB3aXRoIHRoZSBhY3R1YWwgcGxheWVyJ3MgbGV2ZWxcclxuICAvLyBjb25zdCBiYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoY3VycmVudExldmVsKTtcclxuICAvLyBjb25zb2xlLmxvZyhgQ29uZ3JhdHVsYXRpb25zISBZb3UndmUgcmVhY2hlZCBMZXZlbCAke2N1cnJlbnRMZXZlbH0uIFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApO1xyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuICAgIC8qXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiB9LFxyXG4gICAgICAvLyBBZGQgbW9yZSBiYWRnZXMgaGVyZSBmb3IgbGV2ZWxzIDUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCBhbmQgMTAwXHJcbiAgICAgIC8vIEV4YW1wbGU6XHJcbiAgICAgIC8vIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiIH0sXHJcbiAgICAgIC8vIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgfSxcclxuICAgICAgLy8gLi4uYW5kIHNvIG9uXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgY29uc3QgbWF4TGV2ZWwgPTEwMDsgLy8gQXNzdW1pbmcgZWFjaCBiYWRnZSBpcyBhd2FyZGVkIGV2ZXJ5IDUgbGV2ZWxzXHJcbiAgICBjb25zdCBjYXBwZWRMZXZlbCA9IE1hdGgubWluKGxldmVsLCBtYXhMZXZlbCk7XHJcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoY2FwcGVkTGV2ZWwgLyA1KSAtIDE7XHJcbiAgICByZXR1cm4gYmFkZ2VzW2luZGV4XTtcclxuICB9XHJcbiAgXHJcblxyXG4gIGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIH1cclxuICAqL1xyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBMZXZlbERhdGEge1xyXG4gICAgcG9pbnRzOiBudW1iZXI7XHJcbiAgICBsZXZlbDogbnVtYmVyO1xyXG4gICAgcG9pbnRzTmV4dDogbnVtYmVyO1xyXG4gIH1cclxuICBcclxuICBjb25zdCBsZXZlbERhdGE6IExldmVsRGF0YVtdID0gW1xyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAwLCBwb2ludHNOZXh0OiAwfSxcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMSwgcG9pbnRzTmV4dDogMTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDAsIGxldmVsOiAyLCBwb2ludHNOZXh0OiAzMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMCwgbGV2ZWw6IDMsIHBvaW50c05leHQ6IDc1MDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwLCBsZXZlbDogNCwgcG9pbnRzTmV4dDogMTUwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTAwMCwgbGV2ZWw6IDUsIHBvaW50c05leHQ6IDMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAsIGxldmVsOiA2LCBwb2ludHNOZXh0OiA1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwMDAwLCBsZXZlbDogNywgcG9pbnRzTmV4dDogODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MDAwMCwgbGV2ZWw6IDgsIHBvaW50c05leHQ6IDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMDAwMCwgbGV2ZWw6IDksIHBvaW50c05leHQ6IDE3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3MDAwMCwgbGV2ZWw6IDEwLCBwb2ludHNOZXh0OiAyMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzAwMDAsIGxldmVsOiAxMSwgcG9pbnRzTmV4dDogMzAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwLCBsZXZlbDogMTIsIHBvaW50c05leHQ6IDM4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4MDAwMCwgbGV2ZWw6IDEzLCBwb2ludHNOZXh0OiA0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzAwMDAsIGxldmVsOiAxNCwgcG9pbnRzTmV4dDogNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjAwMDAwLCBsZXZlbDogMTUsIHBvaW50c05leHQ6IDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAwMCwgbGV2ZWw6IDE2LCBwb2ludHNOZXh0OiA5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjAwMDAsIGxldmVsOiAxNywgcG9pbnRzTmV4dDogMTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMTAwMDAsIGxldmVsOiAxOCwgcG9pbnRzTmV4dDogMTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMjAwMDAsIGxldmVsOiAxOSwgcG9pbnRzTmV4dDogMTU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1NTAwMDAsIGxldmVsOiAyMCwgcG9pbnRzTmV4dDogMTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4MDAwMDAsIGxldmVsOiAyMSwgcG9pbnRzTmV4dDogMjA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwNzAwMDAsIGxldmVsOiAyMiwgcG9pbnRzTmV4dDogMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzNjAwMDAsIGxldmVsOiAyMywgcG9pbnRzTmV4dDogMjY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2NzAwMDAsIGxldmVsOiAyNCwgcG9pbnRzTmV4dDogMzAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMDAsIGxldmVsOiAyNSwgcG9pbnRzTmV4dDogMzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNTAwMDAsIGxldmVsOiAyNiwgcG9pbnRzTmV4dDogMzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MjAwMDAsIGxldmVsOiAyNywgcG9pbnRzTmV4dDogNDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMTAwMDAsIGxldmVsOiAyOCwgcG9pbnRzTmV4dDogNDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MjAwMDAsIGxldmVsOiAyOSwgcG9pbnRzTmV4dDogNDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5NTAwMDAsIGxldmVsOiAzMCwgcG9pbnRzTmV4dDogNTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0MDAwMDAsIGxldmVsOiAzMSwgcG9pbnRzTmV4dDogNTg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU4NzAwMDAsIGxldmVsOiAzMiwgcG9pbnRzTmV4dDogNjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYzNjAwMDAsIGxldmVsOiAzMywgcG9pbnRzTmV4dDogNjg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY4NzAwMDAsIGxldmVsOiAzNCwgcG9pbnRzTmV4dDogNzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDAwMDAsIGxldmVsOiAzNSwgcG9pbnRzTmV4dDogNzk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5NTAwMDAsIGxldmVsOiAzNiwgcG9pbnRzTmV4dDogODUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg1MjAwMDAsIGxldmVsOiAzNywgcG9pbnRzTmV4dDogOTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkxMTAwMDAsIGxldmVsOiAzOCwgcG9pbnRzTmV4dDogOTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk3MjAwMDAsIGxldmVsOiAzOSwgcG9pbnRzTmV4dDogMTAzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDM1MDAwMCwgbGV2ZWw6IDQwLCBwb2ludHNOZXh0OiAxMTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMDAwMDAwLCBsZXZlbDogNDEsIHBvaW50c05leHQ6IDExNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTE2NzAwMDAsIGxldmVsOiA0MiwgcG9pbnRzTmV4dDogMTIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjM2MDAwMCwgbGV2ZWw6IDQzLCBwb2ludHNOZXh0OiAxMzA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMDcwMDAwLCBsZXZlbDogNDQsIHBvaW50c05leHQ6IDEzODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTM4MDAwMDAsIGxldmVsOiA0NSwgcG9pbnRzTmV4dDogMTQ1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNDU1MDAwMCwgbGV2ZWw6IDQ2LCBwb2ludHNOZXh0OiAxNTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MzIwMDAwLCBsZXZlbDogNDcsIHBvaW50c05leHQ6IDE2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTYxMTAwMDAsIGxldmVsOiA0OCwgcG9pbnRzTmV4dDogMTY5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjkyMDAwMCwgbGV2ZWw6IDQ5LCBwb2ludHNOZXh0OiAxNzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3NzUwMDAwLCBsZXZlbDogNTAsIHBvaW50c05leHQ6IDE4NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTg2MDAwMDAsIGxldmVsOiA1MSwgcG9pbnRzTmV4dDogMTk0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxOTQ3MDAwMCwgbGV2ZWw6IDUyLCBwb2ludHNOZXh0OiAyMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwMzYwMDAwLCBsZXZlbDogNTMsIHBvaW50c05leHQ6IDIxMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjEyNzAwMDAsIGxldmVsOiA1NCwgcG9pbnRzTmV4dDogMjIyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMjIwMDAwMCwgbGV2ZWw6IDU1LCBwb2ludHNOZXh0OiAyMzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMTUwMDAwLCBsZXZlbDogNTYsIHBvaW50c05leHQ6IDI0MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjQxMjAwMDAsIGxldmVsOiA1NywgcG9pbnRzTmV4dDogMjUxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNTExMDAwMCwgbGV2ZWw6IDU4LCBwb2ludHNOZXh0OiAyNjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2MTIwMDAwLCBsZXZlbDogNTksIHBvaW50c05leHQ6IDI3MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjcxNTAwMDAsIGxldmVsOiA2MCwgcG9pbnRzTmV4dDogMjgyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyODIwMDAwMCwgbGV2ZWw6IDYxLCBwb2ludHNOZXh0OiAyOTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI5MjcwMDAwLCBsZXZlbDogNjIsIHBvaW50c05leHQ6IDMwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAzNjAwMDAsIGxldmVsOiA2MywgcG9pbnRzTmV4dDogMzE0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMTQ3MDAwMCwgbGV2ZWw6IDY0LCBwb2ludHNOZXh0OiAzMjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMyNjAwMDAwLCBsZXZlbDogNjUsIHBvaW50c05leHQ6IDMzNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM3NTAwMDAsIGxldmVsOiA2NiwgcG9pbnRzTmV4dDogMzQ5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNDkyMDAwMCwgbGV2ZWw6IDY3LCBwb2ludHNOZXh0OiAzNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM2MTEwMDAwLCBsZXZlbDogNjgsIHBvaW50c05leHQ6IDM3MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzczMjAwMDAsIGxldmVsOiA2OSwgcG9pbnRzTmV4dDogMzg1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODU1MDAwMCwgbGV2ZWw6IDcwLCBwb2ludHNOZXh0OiAzOTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM5ODAwMDAwLCBsZXZlbDogNzEsIHBvaW50c05leHQ6IDQxMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDEwNzAwMDAsIGxldmVsOiA3MiwgcG9pbnRzTmV4dDogNDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MjM2MDAwMCwgbGV2ZWw6IDczLCBwb2ludHNOZXh0OiA0MzY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQzNjcwMDAwLCBsZXZlbDogNzQsIHBvaW50c05leHQ6IDQ1MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUwMDAwMDAsIGxldmVsOiA3NSwgcG9pbnRzTmV4dDogNDYzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NjM1MDAwMCwgbGV2ZWw6IDc2LCBwb2ludHNOZXh0OiA0NzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3NzIwMDAwLCBsZXZlbDogNzcsIHBvaW50c05leHQ6IDQ5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDkxMTAwMDAsIGxldmVsOiA3OCwgcG9pbnRzTmV4dDogNTA1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDUyMDAwMCwgbGV2ZWw6IDc5LCBwb2ludHNOZXh0OiA1MTk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUxOTUwMDAwLCBsZXZlbDogODAsIHBvaW50c05leHQ6IDUzNDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTM0MDAwMDAsIGxldmVsOiA4MSwgcG9pbnRzTmV4dDogNTQ4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDg3MDAwMCwgbGV2ZWw6IDgyLCBwb2ludHNOZXh0OiA1NjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU2MzYwMDAwLCBsZXZlbDogODMsIHBvaW50c05leHQ6IDU3ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTc4NzAwMDAsIGxldmVsOiA4NCwgcG9pbnRzTmV4dDogNTk0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1OTQwMDAwMCwgbGV2ZWw6IDg1LCBwb2ludHNOZXh0OiA2MDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwOTUwMDAwLCBsZXZlbDogODYsIHBvaW50c05leHQ6IDYyNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjI1MjAwMDAsIGxldmVsOiA4NywgcG9pbnRzTmV4dDogNjQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NDExMDAwMCwgbGV2ZWw6IDg4LCBwb2ludHNOZXh0OiA2NTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY1NzIwMDAwLCBsZXZlbDogODksIHBvaW50c05leHQ6IDY3MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjczNTAwMDAsIGxldmVsOiA5MCwgcG9pbnRzTmV4dDogNjkwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2OTAwMDAwMCwgbGV2ZWw6IDkxLCBwb2ludHNOZXh0OiA3MDY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcwNjcwMDAwLCBsZXZlbDogOTIsIHBvaW50c05leHQ6IDcyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzIzNjAwMDAsIGxldmVsOiA5MywgcG9pbnRzTmV4dDogNzQwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDA3MDAwMCwgbGV2ZWw6IDk0LCBwb2ludHNOZXh0OiA3NTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1ODAwMDAwLCBsZXZlbDogOTUsIHBvaW50c05leHQ6IDc3NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzc1NTAwMDAsIGxldmVsOiA5NiwgcG9pbnRzTmV4dDogNzkzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTMyMDAwMCwgbGV2ZWw6IDk3LCBwb2ludHNOZXh0OiA4MTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgxMTEwMDAwLCBsZXZlbDogOTgsIHBvaW50c05leHQ6IDgyOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODI5MjAwMDAsIGxldmVsOiA5OSwgcG9pbnRzTmV4dDogODQ3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NDc1MDAwMCwgbGV2ZWw6IDEwMCwgcG9pbnRzTmV4dDogODY2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NjYwMDAwMCwgbGV2ZWw6IDEwMSwgcG9pbnRzTmV4dDogODg0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4ODQ3MDAwMCwgbGV2ZWw6IDEwMiwgcG9pbnRzTmV4dDogOTAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MDM2MDAwMCwgbGV2ZWw6IDEwMywgcG9pbnRzTmV4dDogOTIyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjI3MDAwMCwgbGV2ZWw6IDEwNCwgcG9pbnRzTmV4dDogOTQyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NDIwMDAwMCwgbGV2ZWw6IDEwNSwgcG9pbnRzTmV4dDogOTYxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NjE1MDAwMCwgbGV2ZWw6IDEwNiwgcG9pbnRzTmV4dDogOTgxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5ODEyMDAwMCwgbGV2ZWw6IDEwNywgcG9pbnRzTmV4dDogMTAwMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMTEwMDAwLCBsZXZlbDogMTA4LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDIxMjAwMDAsIGxldmVsOiAxMDksIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwNDE1MDAwMCwgbGV2ZWw6IDExMCwgcG9pbnRzTmV4dDogMTA2MTUwMDAwIH0sXHJcbiAgXTtcclxuICBcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzOiBudW1iZXIpOiBMZXZlbERhdGEge1xyXG4gICAgbGV0IGxldmVsIDpMZXZlbERhdGEgPSBsZXZlbERhdGFbMF07XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmIChwb2ludHMgPj0gZGF0YS5wb2ludHMpIHtcclxuICAgICAgICBsZXZlbCA9IGRhdGE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsZXZlbDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBzdGF0dXNQb2ludHNGb3JMZXZlbCh0YXJnZXRMZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBzdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAodGFyZ2V0TGV2ZWwgPT0gZGF0YS5sZXZlbCAmJiBzdGF0dXNQb2ludHMgPT0gMCkge1xyXG4gICAgICAgIHN0YXR1c1BvaW50cyA9IGRhdGEucG9pbnRzO1xyXG4gICAgICB9IFxyXG4gICAgfVxyXG5cclxuXHRcdFxyXG5cdFx0cmV0dXJuIHN0YXR1c1BvaW50c1xyXG4gIH1cclxuICBcclxuXHJcbi8qXHJcbmNvbnN0IHBvaW50cyA9IDU1MDA7XHJcbmNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzKTtcclxuY29uc29sZS5sb2coYFdpdGggJHtwb2ludHN9IHBvaW50cywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgJHtsZXZlbH0uYCk7XHJcbiovIiwgImNvbnN0IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlOiBzdHJpbmdbXSA9IFtcclxuXHRcIlNldmVuIGRheXMgb2Ygbm90ZS10YWtpbmc/IFlvdSdyZSBwcmFjdGljYWxseSBhIG5vdGUgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgZmllc3RhISBcdUQ4M0NcdURGODlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgcGFydHkgZ29pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIFlvdSdyZSBsaWtlIHRoZSBKYW1lcyBCb25kIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURENzZcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2VjcmV0IGFnZW50IVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAnTm90ZS1BLURheScgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2FwZXMgb3B0aW9uYWwhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSd2ZSBwcmFjdGljYWxseSB3cml0dGVuIGEgbWluaSBub3ZlbCBieSBub3chIFx1RDgzRFx1RENEQVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBhdXRob3Igc3RhdHVzIGFjaGlldmVkIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBVc2FpbiBCb2x0IG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc3ByaW50aW5nIHRvd2FyZHMga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNwcmVlISBJdCdzIGxpa2UgYSBub3Rlcy1wbG9zaW9uISBcdUQ4M0RcdURDQTVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgZmlyZXdvcmtzIGNvbWluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGJhc2ljYWxseSB0aGUgTWljaGFlbCBKb3JkYW4gb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDMFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzbGFtIGR1bmshXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTVZQISBcdUQ4M0NcdURGQzZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzY29yaW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlICdTZXZlbiBEYXkgTm90ZSBGZXZlcicgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXRjaCB0aGUgZmV2ZXIhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIHJvY2tzdGFyISBcdUQ4M0NcdURGQjhcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBqYW1taW4nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIG1hZ2ljIHNob3chIE5vdyB5b3Ugc2VlIHRoZSBub3Rlcywgbm93IHlvdSBkb24ndCEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMsIGtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgbGlrZSBhIG5vdGUtdGFraW5nIEplZGkgTWFzdGVyISBcdUQ4M0NcdURGMENcdTI2OTRcdUZFMEYgW1hdIHBvaW50cywgbWF5IHRoZSBub3RlcyBiZSB3aXRoIHlvdSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTWFjR3l2ZXIsIHR1cm5pbmcgaW5mb3JtYXRpb24gaW50byBzb2x1dGlvbnMhIFx1RDgzRFx1REQyN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNyYWZ0aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgY2hlZiwgY29va2luZyB1cCBhIGtub3dsZWRnZSBmZWFzdCEgXHVEODNDXHVERjczXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY29va2luZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0MFx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIExld2lzIGFuZCBDbGFyaywgY2hhcnRpbmcgbmV3IHRlcnJpdG9yaWVzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEREZBXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBkZXRlY3RpdmUsIHNvbHZpbmcgY2FzZXMgb2YgY3VyaW9zaXR5ISBcdUQ4M0RcdURENzVcdUZFMEZcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBkZXRlY3RpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBwaW9uZWVyLCBibGF6aW5nIHRyYWlscyB0aHJvdWdoIHRoZSBmb3Jlc3RzIG9mIGluZm9ybWF0aW9uISBcdUQ4M0NcdURGMzJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwaW9uZWVyaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiXHJcbl07XHJcblxyXG5jb25zdCB0d29Ob3RlTWVzc2FnZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQm9vbSEgWW91IGp1c3QgYWNlZCB0aGUgMi1ub3RlIHRhbmdvISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIGdyb292aW4nIVwiLFxyXG5cdFwiVHdvIG5vdGVzIGluIGEgZGF5PyBZb3UncmUgb2ZmaWNpYWxseSBhIE5vdGUgTmluamEhIFx1RDgzRVx1REQ0QiBbWF0gcG9pbnRzIGVhcm5lZC4gUm9jayBvbiFcIixcclxuXHRcIkhpZ2gtZml2ZSEgWW91J3ZlIGNvbnF1ZXJlZCB0aGUgMi1ub3RlIHJvZGVvISBcdUQ4M0VcdUREMjAgW1hdIHBvaW50cyBlYXJuZWQuIFllZWhhdyFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlISBUd28gbm90ZXMgaW4gb25lIGRheSwgeW91IGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFR3byBub3RlcyBpbiBhIGRheSAtIHdoYXQncyB5b3VyIHNlY3JldCB3ZWFwb24/IFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiS2Fib29tISBZb3UganVzdCBibGV3IHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgd2F0ZXIhIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAyLW5vdGUgc3VwZXJzdGFyISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBpbiB0aGUgYmFnLiBLZWVwIHNoaW5pbmchXCIsXHJcblx0XCJEb3VibGUgdXAsIGRvdWJsZSBkb3duISBUd28gbm90ZXMgaW4gb25lIGRheSAtIHlvdSdyZSBhIHJvY2tzdGFyISBcdUQ4M0NcdURGQjggW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIHBhcnR5ISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIkthLWNoaW5nISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSByYWNraW5nIHVwIHRob3NlIHBvaW50cyEgXHVEODNEXHVEQ0IwIFtYXSBlYXJuZWQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFnaWNpYW4hIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCB0cmljaz9cIixcclxuXHRcIlR3byBub3Rlcz8gTmFpbGVkIGl0ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgZ29pbmchXCIsXHJcblx0XCJBYnJhLWNhZGFicmEhIFR3byBub3RlcyBhcHBlYXIhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSwgZG91YmxlIHRoZSBmdW4hIFR3byBub3RlcyBpbiBvbmUgZGF5ISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIGZpZXN0YSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fwb3chIFR3byBub3RlcyBpbiBhIGRheSAtIHlvdSdyZSBhIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGIFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgYWR2ZW50dXJlP1wiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiXHJcbl07XHJcblxyXG5jb25zdCByYW5kb21Qb2ludE5vdGljZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQmF6aW5nYSEgWW91IGp1c3Qgc25hZ2dlZCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiS2Fib29tISBbWF0gcG9pbnRzIGFyZSBub3cgaW4geW91ciBwb2NrZXQhXCIsXHJcblx0XCJXb29ob28hIFtYXSBwb2ludHMgZWFybmVkISBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiUG9pbnRzIGFob3khIFtYXSBtb3JlIGluIHRoZSBiYW5rIVwiLFxyXG5cdFwiU2NvcmUhIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciB0b3RhbCFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJaaXBwaXR5LXphcCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQ2hhbXBpb24gbW92ZSEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJCaW5nbyEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJTaGF6YW0hIFtYXSBwb2ludHMgdG8gdGhlIHJlc2N1ZSFcIixcclxuXHRcIkthLWNoaW5nISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlN1cGVyYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJCcmF2byEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiV2VsbCBkb25lISBbWF0gbW9yZSBwb2ludHMgaW4gdG93IVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzLCBqdXN0IGxpa2UgdGhhdCFcIixcclxuXHRcIkEgcm91bmQgb2YgYXBwbGF1c2UgZm9yIFtYXSBwb2ludHMhXCIsXHJcblx0XCJXaG9vc2ghIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiV29vISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiR3JlYXQgam9iISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkZhbnRhc3RpYyEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiSG9vcmF5ISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIk5pY2Ugb25lISBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQhXCIsXHJcblx0XCJXb290IHdvb3QhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJhbSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiQ29vbCBiZWFucyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJTcGxlbmRpZCEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTWFydmVsb3VzISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphbnkhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkV4cXVpc2l0ZSEgW1hdIHBvaW50cyBpbiB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiT3V0c3RhbmRpbmchIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIGpvYiFcIixcclxuXHRcIk1hZ25pZmljZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiVGVycmlmaWMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlN1cGVyYiEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIkV4Y2VsbGVudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiQXdlc29tZSEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiV2VsbCBwbGF5ZWQhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJJbXByZXNzaXZlISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQnJpbGxpYW50ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJOaWNlIG1vdmUhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlN0ZWxsYXIhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiV2VsbCBkZXNlcnZlZCEgW1hdIHBvaW50cyBlYXJuZWQhXCJcclxuXTtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZS5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZVtyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdHdvTm90ZU1lc3NhZ2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHR3b05vdGVNZXNzYWdlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyhwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiByYW5kb21Qb2ludE5vdGljZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gcmFuZG9tUG9pbnROb3RpY2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuLy8gRXhhbXBsZSB1c2FnZVxyXG4vLyBjb25zdCByYW5kb21Qb2ludHMgPSAxMDA7IC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjdHVhbCBwb2ludHMgdmFsdWVcclxuLy8gY29uc3QgcmFuZG9tTWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocmFuZG9tUG9pbnRzKTtcclxuLy8gY29uc29sZS5sb2cocmFuZG9tTWVzc2FnZSk7XHJcblxyXG5cclxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQSxtQkFBcUU7OztBQ0FyRSxzQkFB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LEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLElBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsS0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3RELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUN6RDtBQUVPLFNBQVMsa0JBQWtCLFFBQTJCO0FBQzNELE1BQUksUUFBbUIsVUFBVSxDQUFDO0FBQ2xDLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksVUFBVSxLQUFLLFFBQVE7QUFDekIsY0FBUTtBQUFBLElBQ1YsT0FBTztBQUNMO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLHFCQUFxQixhQUE2QjtBQUNoRSxNQUFJLGVBQWU7QUFDbkIsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxlQUFlLEtBQUssU0FBUyxnQkFBZ0IsR0FBRztBQUNsRCxxQkFBZSxLQUFLO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBR0YsU0FBTztBQUNQOzs7QUM5SUYsSUFBTSwwQkFBb0M7QUFBQSxFQUN6QztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0sa0JBQTRCO0FBQUEsRUFDakM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxF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O0FBQzlDO0FBQUEsRUFDRDtBQUVBLFFBQU0sU0FBUyxXQUFXO0FBQzFCLFFBQU0sZUFBZSxPQUFPLGFBQWE7QUFFekMsTUFBSSxDQUFDLGNBQWM7QUFDbEIsWUFBUSxNQUFNLHNFQUFzRTtBQUNwRjtBQUFBLEVBQ0Q7QUFFQSxNQUFJLGVBQWUsYUFBYSxXQUFXLFFBQVEsa0JBQU07QUFDekQsaUJBQWUsYUFBYSxXQUFXLFFBQVEsMEJBQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLDRCQUFRLE1BQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLG9CQUFRLE1BQU07QUFFckQsU0FBTyxpQkFBaUIsWUFBWTtBQUNyQztBQUVBLFNBQVMsNkJBQTZCLGVBQXVCLFdBQTJCO0FBQ3ZGLE1BQUk7QUFDSixNQUFJLFNBQVMsZUFBZSxFQUFFLElBQUksV0FBVTtBQUMzQyxtQkFBZSxZQUFZLFNBQVMsZUFBZSxFQUFFO0FBQUEsRUFDdEQsT0FBTztBQUNOLG1CQUFlO0FBQUEsRUFDaEI7QUFFQSxTQUFPO0FBQ1I7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAib2JqIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgIk1JTExJU0VDT05EU19JTl9XRUVLIiwgImZvcm1hdHRlcnMiLCAibG9jYWxpemUiLCAieSIsICJNIiwgImQiLCAiYSIsICJoIiwgIkgiLCAibSIsICJzIiwgIlMiLCAiZGF0ZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0TG9uZyIsICJ0aW1lTG9uZ0Zvcm1hdHRlciIsICJkYXRlVGltZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0IiwgImZvcm1hdERpc3RhbmNlIiwgImZvcm1hdCIsICJmb3JtYXRSZWxhdGl2ZSIsICJvcmRpbmFsTnVtYmVyIiwgInZhbHVlQ2FsbGJhY2siLCAiZGVmYXVsdE9wdGlvbnMiLCAibG9jYWxlIiwgIm1hdGNoIiwgInBhdGgiLCAiYXBwIiwgImZpbGVOYW1lIiwgImN1cnJlbnRDb3VudCIsICJpIiwgImkiLCAiZSIsICJpIiwgIm1hdGNoIiwgImZpbGUiLCAiYXBwIl0KfQo= diff --git a/src/main.ts b/src/main.ts index 1a84056..1c83eda 100644 --- a/src/main.ts +++ b/src/main.ts @@ -612,6 +612,23 @@ export default class gamification extends Plugin { return this.updateAvatarPage(this.settings.avatarPageName) } + async increaseStreakbooster(increaseValue:number){ + this.settings.streakbooster += increaseValue + await this.saveData(this.settings) + } + + + async decreaseStreakbooster(decreaseValue:number){ + let newValue = this.settings.streakbooster -= decreaseValue + if (newValue < 0){ + newValue = 0 + } + this.settings.streakbooster = newValue + await this.saveData(this.settings) + } + + + async updateAvatarPage(avatarPageName: string): Promise{ const existingFile = app.vault.getAbstractFileByPath(`${avatarPageName}.md`); From 6409e73733e2aa4454b0a6d3060076e3a5cb077c Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 21:36:09 +0200 Subject: [PATCH 03/15] marker booster --- main.js | 5 +++-- src/settings.ts | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index 2eb69ff..d4382a5 100644 --- a/main.js +++ b/main.js @@ -64,7 +64,8 @@ var defaultSettings = { dailyNoteCreationDate: "12.08.2023", weeklyNoteCreationTask: 0, weeklyNoteCreationDate: "12.08.2023", - streakbooster: 0 + streakbooster: 0, + streakboosterAlive: false }; var GamificationPluginSettings = class extends import_obsidian.PluginSettingTab { constructor(app2, plugin) { @@ -3422,4 +3423,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgY3JlYXRlZC5gKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpO1xyXG5cdFx0fSBlbHNlIGlmIChpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0Ly8gZG8gbm90aGluZ1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgbm90ZSBjcmVhdGlvbiB3YXMgcmF0ZWQgYWxyZWFkeSB0b2RheS5gKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IDE7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpIHtcclxuXHRcdGxldCBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzID0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0aWYgKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPCA3KSB7XHJcblx0XHRcdGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMrKztcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXM7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblxyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24oY3VycmVudFdlZWtseUNyZWF0ZWROb3Rlcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24obmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyKSB7XHJcblx0XHRpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA8PSA2KSB7XHJcblx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9IGVsc2UgaWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPT0gNykge1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSk7XHJcblx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB1cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyOiBIVE1MU3BhbkVsZW1lbnQpe1xyXG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHModGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpXHJcblx0XHRjb25zdCBwcm9ncmVzc2JhclBlcmNlbnQgPSAodGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMFxyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9YClcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyOiBudW1iZXIsIGJhckxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRsZXQgcHJvZ3Jlc3NiYXIgPSAnJ1xyXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gY2hhck51bVByb2dyZXNzYmFyOyBpKyspIHtcclxuXHRcdFx0aWYgKGkgPD0gYmFyTGVuZ3RoKSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJz0nXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJy0nXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9ncmVzc2JhcjtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZFNldHRpbmdzKCknKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0bGV0IHN0cmVha2Jvb3N0ZXIgPSB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXI7XHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3IgPSB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyKSArIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VTdHJlYWtib29zdGVyKGluY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArPSBpbmNyZWFzZVZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZGVjcmVhc2VTdHJlYWtib29zdGVyKGRlY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdGxldCBuZXdWYWx1ZSA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtPSBkZWNyZWFzZVZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmxldmVsQW5kUG9pbnRzXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeZGFpbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UzID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UzID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIHJlYWQgY3VycmVudCBQb2ludHMgZnJvbSBzZXR0aW5nc1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzID0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHJcblx0XHRjb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKG5ld1BvaW50cyk7XHJcblx0XHRsZXQgbmV4dExldmVsQXQgPSB0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsO1xyXG5cdFx0bGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA8IGxldmVsLmxldmVsKXtcclxuXHRcdFx0Ly8gTGV2ZWwgVXAgYXJjaGl2ZWRcclxuXHRcdFx0bmV3IE5vdGljZShgV2l0aCAke25ld1BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsLmxldmVsfS5gKVxyXG5cdFx0XHQvLyBjaGVjayBmaXJzdCBpZiB0aGlzIG1lYW5zIGEgbmV3IGJhZGdlIGJlZm9yZSBpdCBnZXRzIG92ZXJ3cml0dGVuXHJcblx0XHRcdHJlY2VpdmVCYWRnZSA9IGNoZWNrSWZSZWNlaXZlQUJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGxldmVsLmxldmVsKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsID0gbGV2ZWwubGV2ZWw7XHJcblx0XHRcdG5leHRMZXZlbEF0ID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwcm9ncmVzc0JhckVuZCA9IG5leHRMZXZlbEF0IC0gbmV3UG9pbnRzO1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzU3RyaW5nID0gJ3wgKipMZXZlbCoqICB8ICoqJyArIGxldmVsLmxldmVsICsgJyoqIHxcXG58IFBvaW50cyB8ICcgKyBuZXdQb2ludHMgKyAnICAgIHxcXG5ebGV2ZWxBbmRQb2ludHNcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW0V4cHJpcmllbmNlXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXFxuICAgIGRhdGE6IFsnICsgbmV3UG9pbnRzICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgcHJvZ3Jlc3NCYXJFbmQgKyAnXVxcbnhNaW46ICcgKyBsZXZlbC5wb2ludHMgKyAnXFxueE1heDogJyArIGxldmVsLnBvaW50c05leHQgKyAnXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJ1xyXG5cdFx0Y29uc3QgZGFpbHlDaGFsbGVuZ2UgPSAnfCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKionICsgdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgKyAnLzIqKiAgIHwnO1xyXG5cdFx0Y29uc3QgZGF5c0xlZnRJbldlZWtseUNoYWluIDogbnVtYmVyID0gNyAtIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGNvbnN0IHdlZWtseUNoYWxsZW5nZSA9ICd8ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsKXtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAyO1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyNDtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQzID0gcmVmZXJlbmNlMyArIDI0IC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZWNlaXZlQmFkZ2VcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBnaXZlQmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IGJhZGdlLmxldmVsICsgXCI6ICpcIiArIGJhZGdlLm5hbWUgKyBcIipcIil7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDE7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyICsgMjtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqIFwiICsgYmFkZ2UubGV2ZWwgKyBcIlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXVxyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMi5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlSW5pdEJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKipcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgcmVtb3ZlQmFkZ2VzV2hlbkluaXRMZXZlbEhpZ2hlcihhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBsZXZlbDogbnVtYmVyKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgb3V0c3RhbmRpbmdcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyID09IG51bGwpe1xyXG5cdFx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cclxuXHRcdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGxldmVsKSB7XHJcblx0XHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgcmVmZXJlbmNlICsgMSksIC4uLmxpbmVzLnNsaWNlKHJlZmVyZW5jZTIpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBjcmVhdGVDaGFydCh2YXVsdDogVmF1bHQpOiBQcm9taXNlPHN0cmluZz57XHJcblx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RmlsZSA9IGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlcylcclxuXHRcdC8vbGV0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lXHJcblx0XHQvL2lmIChlYXJsaWVzdEZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lICl7XHJcblx0XHRjb25zdCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5tdGltZVxyXG5cdFx0Ly99XHJcblxyXG5cdFx0bGV0IG1vbnRoQ291bnRlciA9IDAgLy9mb3JtYXQobmV3IERhdGUoZWFybGllc3REYXRlKSwgJ01NJyk7XHJcblx0XHRsZXQgZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHQvL2NvbnN0IGZpbGVEYXRlTW9udGhNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgZmlsZURhdGVNb250aE1hcE1vZCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBtb250aGNvdW50ID0gbW9udGhzQmV0d2VlbihuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCBuZXcgRGF0ZSgpKVxyXG5cdFx0bGV0IGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0bGV0IHlMYWJlbCA9IFwiXCJcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBjcmVhdGVkXHJcblx0XHQvKndoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH0qL1xyXG5cclxuXHRcdG1vbnRoQ291bnRlciA9IDBcclxuXHRcdGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgbW9kaWZpZWRcclxuXHRcdHdoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHR5TGFiZWwgPSB5TGFiZWwgKyBkYXRlU3RyaW5nICsgXCIsIFwiXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fVxyXG5cdFx0eUxhYmVsID0geUxhYmVsLnNsaWNlKDAseUxhYmVsLmxlbmd0aC0yKVxyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdC8qY29uc3QgY3JlYXRpb25EYXRlcyA9IGdldENyZWF0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNyZWF0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fSovXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgbW9kIGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdGNvbnN0IG1vZGlmaWNhdGlvbkRhdGVzID0gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgY3JlYXRlZFxyXG5cdFx0LypsZXQgY2hhclN0cmluZ0NyZWF0ZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcCkge1xyXG5cdFx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQuc2xpY2UoMCxjaGFyU3RyaW5nQ3JlYXRlZC5sZW5ndGgtMikqL1xyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBtb2RpZmllZFxyXG5cdFx0bGV0IGNoYXJTdHJpbmdNb2RpZmllZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwTW9kKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGtleTogJHtrZXl9LCB2YWx1ZTogJHt2YWx1ZX1gKTtcclxuXHRcdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZC5zbGljZSgwLGNoYXJTdHJpbmdNb2RpZmllZC5sZW5ndGgtMilcclxuXHJcblx0XHRyZXR1cm4gY3JlYXRlQ2hhcnRGb3JtYXQoeUxhYmVsLCBjaGFyU3RyaW5nTW9kaWZpZWQsIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbDogUHJvbWlzZTxib29sZWFuPil7XHJcblx0XHRuZXdMZXZlbC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pPT4ge1xyXG5cdFx0XHRpZihyZXN1bHQpe1xyXG5cdFx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGZhbHNlKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhgYmFkZ2UgZm9yIGxldmVsICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gaXMgJHtiYWRnZS5uYW1lfSAtICR7YmFkZ2UubGV2ZWx9YClcclxuXHRcdFx0XHR0aGlzLmdpdmVCYWRnZUluUHJvZmlsZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBiYWRnZSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0XHRcdHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVtb3ZlS2V5c0Zyb21Gcm9udG1hdHRlcigpIHtcclxuXHRcdC8vY29uc3QgeyBWYXVsdCwgVEZpbGUgfSA9IHdpbmRvdy5hcHA7XHJcblx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcFxyXG5cdFx0Ly9jb25zdCB2YXVsdCA9IFZhdWx0LnJlb3BlbigpO1xyXG5cclxuXHRcdC8vIEdldCBhbGwgTWFya2Rvd24gZmlsZXMgaW4gdGhlIHZhdWx0XHJcblx0XHQvL2NvbnN0IG1hcmtkb3duRmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXAgPSBhd2FpdCBnZXRGaWxlQ291bnRNYXAodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MudGFnc0V4Y2x1ZGUsIHRoaXMuc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSk7XHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcC5rZXlzKCkpIHtcclxuXHRcdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRGaWxlcygpO1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZXMuZmluZChmaWxlID0+IGZpbGUuYmFzZW5hbWUgPT09IGZpbGVOYW1lKTtcclxuXHRcdFx0aWYgKCFmaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGBGaWxlICR7ZmlsZU5hbWV9IG5vdCBmb3VuZC5gKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL2NvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWV9YCk7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIG5ldyBOb3RpY2UoYFJlbW92ZWQgc3BlY2lmaWVkIGtleXMgZnJvbSBmcm9udG1hdHRlciBmcm9tIGZpbGUgXFxcIiR7ZmlsZU5hbWV9XFxcIi5gKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHdoaWNoTGV2ZWxOZXh0QmFkZ2UoY3VycmVudExldmVsOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj57XHJcblx0XHRsZXQgbmV4dEJhZGdlTGV2ZWwgPSAwXHJcblx0XHRmb3IgKGxldCBpID0gY3VycmVudExldmVsOyBpIDwgMTEwOyBpKyspe1xyXG5cdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChpLCB0cnVlKVxyXG5cdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdGNvbnN0IG1hdGNoID0gYmFkZ2UubGV2ZWwubWF0Y2gobGV2ZWxSZWdleCk7XHJcblx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBjdXJyZW50TGV2ZWwgJiYgbmV4dEJhZGdlTGV2ZWwgPT0gMCApIHtcclxuXHRcdFx0XHRcdG5leHRCYWRnZUxldmVsID0gbGV2ZWxOdW1iZXI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV4dEJhZGdlTGV2ZWxcclxuXHR9XHJcblxyXG5cdGFzeW5jIGJvb3N0ZXJGb3JJbml0KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcblx0XHRjb25zdCBuZXh0QmFkZ2VBdCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0Y29uc3Qgc3RhdHVzUG9pbnRzVG9SZWFjaCA9IHN0YXR1c1BvaW50c0ZvckxldmVsKG5leHRCYWRnZUF0KVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgc3RhdHVzUG9pbnRzVG9SZWFjaCBmb3IgbmV4dCBCYWRnZTogJHtzdGF0dXNQb2ludHNUb1JlYWNofWApXHJcblx0XHQvLyA1MCBOb3RlcyBmcm9tIExldmVsIDEgdG8gNSB0byBnZXQgdGhlIGZpcnN0IGJhZGdlLlxyXG5cdFx0Ly8gMzAwIFBvaW50cyBpbiBhdmVyYWdlIGZvciBhIE5vdGUuXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gTWF0aC5yb3VuZCgoc3RhdHVzUG9pbnRzVG9SZWFjaCAtIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKS81MC8zMDApO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSBib29zdGVyRmFjdG9yXHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gdHJ1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgYm9vc3RlckZha3RvcjogJHtib29zdGVyRmFjdG9yfWApXHJcblx0XHRyZXR1cm4gYm9vc3RlckZhY3RvclxyXG5cdH1cclxuXHJcblx0YXN5bmMgb3BlbkF2YXRhckZpbGUoKSB7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlKXtcclxuXHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk/LnBhdGggfHwgJyc7XHJcblx0XHRcdGF3YWl0IGFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGV4aXN0aW5nRmlsZS5wYXRoLCBzb3VyY2VQYXRoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwiRmlsZSBub3QgZm91bmQgb3IgdW5hYmxlIHRvIG9wZW4uXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpc1NhbWVEYXkoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBjdXJyZW50RGF0ZSA9IHdpbmRvdy5tb21lbnQoKTsgLy8gR2V0IHRoZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gY3VycmVudERhdGUuaXNTYW1lKGlucHV0RGF0ZSwgJ2RheScpOyAvLyBDaGVjayBpZiB0aGV5IGFyZSB0aGUgc2FtZSBkYXlcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPbmVEYXlCZWZvcmUoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBvbmVEYXlCZWZvcmVDdXJyZW50ID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKTsgLy8gQ2FsY3VsYXRlIG9uZSBkYXkgYmVmb3JlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBpbnB1dERhdGUuaXNTYW1lKG9uZURheUJlZm9yZUN1cnJlbnQsICdkYXknKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXZhdGFyRmlsZShhcHA6IEFwcCwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG5cdC8vc2V0dGluZ3M6IEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzO1xyXG5cdC8vIERlZmluZSB0aGUgZmlsZSBuYW1lIGFuZCBjb250ZW50XHJcblx0Ly9jb25zdCBmaWxlTmFtZSA9ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nOyAvLyB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lO1xyXG5cdC8vY29uc29sZS5sb2coYGZpbGVOYW1lOiAke2ZpbGVOYW1lfWApXHJcblxyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7ZmlsZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2ZpbGVOYW1lfS5tZCBhbHJlYWR5IGV4aXN0c2ApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHQvLyBDcmVhdGUgdGhlIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHZhdWx0XHJcblx0YXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShgJHtmaWxlTmFtZX0ubWRgLCBhdmF0YXJJbml0Q29udGVudCk7XHJcblxyXG59XHJcblxyXG5cclxuY2xhc3MgTW9kYWxJbmZvcm1hdGlvbmJveCBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmc7IC8vIFN0b3JlIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZGlzcGxheVRleHQ6IHN0cmluZykge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dDsgLy8gU3RvcmUgdGhlIHBhc3NlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5zZXRUZXh0KHRoaXMuZGlzcGxheVRleHQpOyAvLyBVc2UgdGhlIHN0b3JlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlRm9ybWF0U3RyaW5ncyhsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpIHtcclxuXHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHJcblx0aWYgKCFhY3RpdmVWaWV3KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gYWN0aXZlIE1hcmtkb3duIHZpZXcgZm91bmQuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgZWRpdG9yID0gYWN0aXZlVmlldy5lZGl0b3I7XHJcblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cclxuXHRpZiAoIXNlbGVjdGVkVGV4dCkge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIHRleHQgc2VsZWN0ZWQgKGZvciBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIHN3aXRjaCBMYXllciAyICYgMykuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0bGV0IHJlcGxhY2VkVGV4dCA9IHNlbGVjdGVkVGV4dC5yZXBsYWNlQWxsKGxheWVyMiwgXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIik7XHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIzLCBcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIsIGxheWVyMilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiLCBsYXllcjMpXHJcblxyXG5cdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHJlcGxhY2VkVGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IG51bWJlciB7XHJcblx0bGV0IHJhdGluZ0Zha3RvcjogbnVtYmVyXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSByYXRpbmdOZXcgLSBwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMClcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gMFxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ0Zha3RvclxyXG59XHJcblxyXG5cclxuXHJcbiAgXHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4iLCAiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IGdhbWlmaWNhdGlvbiBmcm9tICcuL21haW4nO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBQYXJ0aWFsPElTZXR0aW5ncz4gPSB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiB0cnVlLFxuICBiaW5kRW50ZXI6IHRydWUsXG4gIGJpbmRUYWI6IHRydWUsXG4gIGF2YXRhclBhZ2VOYW1lOiAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJyxcbiAgdGFnc0V4Y2x1ZGU6ICcnLFxuICBmb2xkZXJFeGNsdWRlOiAnRXhjYWxpZHJhdycsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiAnPT0nLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogJyoqJyxcbiAgbnVtQWxsRmlsZXM6IDEsXG4gIG51bUFsbEZpbGVzQ291bnQ6IDAsXG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IDAsXG4gIHN0YXR1c1BvaW50czogMCxcbiAgc3RhdHVzTGV2ZWw6IDEsXG4gIHhwRm9yTmV4dExldmVsOiAxMDAwLFxuICBnYW1pZmljYXRpb25TdGFydERhdGU6ICcxMi4wOC4yMDIzJyxcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGZhbHNlLFxuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IDEsXG4gIGRlYnVnOiBmYWxzZSxcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICBzdHJlYWtib29zdGVyOiAwLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2V0dGluZ3Mge1xuICBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgYmluZEVudGVyOiBib29sZWFuO1xuICBiaW5kVGFiOiBib29sZWFuO1xuICBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbn1cblxuXG5leHBvcnQgY2xhc3MgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcblx0cHJpdmF0ZSByZWFkb25seSBwbHVnaW46IGdhbWlmaWNhdGlvbjtcbiAgXG4gIHB1YmxpYyBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRUYWI6IGJvb2xlYW47XG4gIHB1YmxpYyBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBwdWJsaWMgbnVtQWxsRmlsZXM6IG51bWJlcjtcbiAgcHVibGljIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgcHVibGljIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c1BvaW50czogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIHB1YmxpYyBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcbiAgcHVibGljIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIHB1YmxpYyBkZWJ1ZzogYm9vbGVhbjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBzdHJlYWtib29zdGVyOiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogZ2FtaWZpY2F0aW9uKSB7XG5cdCAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuXHQgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHR9XG4gIFxuXHRwdWJsaWMgZGlzcGxheSgpOiB2b2lkIHtcblx0XHRjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXHRcdGNvbnRhaW5lckVsLmFkZENsYXNzKFwiZXhjYWxpZHJhdy1zZXR0aW5nc1wiKTtcblx0XHR0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG5cblx0XHRjb25zdCBjb2ZmZWVEaXYgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoXCJjb2ZmZWVcIik7XG5cdFx0Y29mZmVlRGl2LmFkZENsYXNzKFwiZXgtY29mZmVlLWRpdlwiKTtcblx0XHRjb25zdCBjb2ZmZWVMaW5rID0gY29mZmVlRGl2LmNyZWF0ZUVsKFwiYVwiLCB7XG5cdFx0aHJlZjogXCJodHRwczovL2tvLWZpLmNvbS9hbmRyZWFzdHJlYmluZ1wiLFxuXHRcdH0pO1xuXHRcdGNvbnN0IGNvZmZlZUltZyA9IGNvZmZlZUxpbmsuY3JlYXRlRWwoXCJpbWdcIiwge1xuXHRcdGF0dHI6IHtcblx0XHRcdHNyYzogXCJodHRwczovL2Nkbi5rby1maS5jb20vY2RuL2tvZmkzLnBuZz92PTNcIixcblx0XHR9LFxuXHRcdH0pO1xuXHRcdGNvZmZlZUltZy5oZWlnaHQgPSA0NTtcblxuXHRcdC8vY29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHQvL2NvbnRhaW5lckVsLmVtcHR5KCk7XG4gIFxuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ0dhbWlmeSB5b3VyIFBLTSAtIFNldHRpbmdzJyB9KTtcblx0XHRjb25zb2xlLmxvZygnc2V0dGluZ3MgY2FsbGVkJylcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCcjdGFncyB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIHRhZ3Mgd2l0aG91dCAjIGFuZCBzZXBhcmF0ZSB3aXRoIFwiLCBcIi5cXG5JbmNsdWRlIG5lc3RlZCB0YWdzLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdFbnRlciB5b3VyIHRhZzEsIHRhZzIvc3VidGFnLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cblx0XHRcdFx0XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnZm9sZGVyIHRvIGlnbm9yZScpXG5cdFx0XHQuc2V0RGVzYygnZW50ZXIgZm9sZGVyIHdoaWNocyBjb250ZW50IHNoYWxsIGJlIGlnbm9yZWQuIFNlcGFyYXRlIHdpdGggXCIsIFwiLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdFbnRlciB5b3VyIGZvbGRlcjEsIGZvbGRlcjIsIFx1MjAyNicpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnUHJvZmlsZSBQYWdlIE5hbWUnKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIGhlcmUgdGhlIG5hbWUgb2YgeW91ciBwcm9maWxlIHBhZ2UgaWYgeW91IGxpa2UuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignbmFtZScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdPdGhlciBTZXR0aW5ncycgfSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnRGlzYWJsZSBJbml0IENvbW1hbmQnKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gcmVtb3ZlIHRoZSBpbml0IGNvbW1hbmQgZnJvbSBjb21tYW5kIHByb21wdCBieSBzd2l0Y2hpbmcgb2ZmLlxcbnJlc3RhcnQgbmVlZGVkLicpXG5cdFx0XHQuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IFxuXHRcdFx0XHR0b2dnbGVcbiAgICAgICAgICBcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kKVxuICAgICAgICBcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZCA9IHZhbHVlO1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuICAgICAgICAgIFx0XHRcdH0pLFxuXHRcdFx0KTtcblxuXHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2xpbWl0IHRoZSB2aXNpYmxlIG1vbnRoIGluIHRoZSBjaGFydCBvbiB5b3VyIGF2YXRhciBwYWdlOiAnICsgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXG5cdFx0XHQuc2V0RGVzYygnaWYgMCwgYWxsIG1vbnRoIHdpbGwgYmUgc2hvd24uIEVudGVyIGEgbnVtYmVyIGhvdyBtYW55IG1vbnRoIHNoYWxsIGJlIHNob3duLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ051bWJlciBvZiBNb250aCB0byBzaG93Jylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZS50b1N0cmluZygpKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPSBwYXJzZUludCh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG4gIFxuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnUHJvZ3Jlc3NpdmUgU3VtbWFyaXphdGlvbicpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2Ugd2hpY2ggZm9ybWF0dGluZyB5b3UgdXNlIGZvciBMYXllciAyIGFuZCAzLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0xheWVyIDIgaXMgdXN1YWxseSAqKicpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0xheWVyIDMgaXMgdXN1YWxseSA9PScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdH0pKTtcblxuXHR9XG4gIH0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWlyZWRBcmdzKHJlcXVpcmVkLCBhcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA8IHJlcXVpcmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihyZXF1aXJlZCArICcgYXJndW1lbnQnICsgKHJlcXVpcmVkID4gMSA/ICdzJyA6ICcnKSArICcgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmdzLmxlbmd0aCArICcgcHJlc2VudCcpO1xuICB9XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBkYXRlP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLiBUaGUgZnVuY3Rpb24gd29ya3MgZm9yIGRhdGVzIHRyYW5zZmVycmVkIGFjcm9zcyBpZnJhbWVzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRhdGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGEgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZSgpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoTmFOKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3Igc29tZSB2YWx1ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSgnMjAxNC0wMi0zMScpXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBvYmplY3Q6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoe30pXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCBfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGFyZ1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCk7XG5cbiAgLy8gQ2xvbmUgdGhlIGRhdGVcbiAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgRGF0ZSB8fCBfdHlwZW9mKGFyZ3VtZW50KSA9PT0gJ29iamVjdCcgJiYgYXJnU3RyID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdudW1iZXInIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgTnVtYmVyXScpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IFN0cmluZ10nKSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXCJTdGFydGluZyB3aXRoIHYyLjAuMC1iZXRhLjEgZGF0ZS1mbnMgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyBhcyBkYXRlIGFyZ3VtZW50cy4gUGxlYXNlIHVzZSBgcGFyc2VJU09gIHRvIHBhcnNlIHN0cmluZ3MuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI3N0cmluZy1hcmd1bWVudHNcIik7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cbn0iLCAiaW1wb3J0IGlzRGF0ZSBmcm9tIFwiLi4vaXNEYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzVmFsaWRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdmFsaWQ/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGZhbHNlIGlmIGFyZ3VtZW50IGlzIEludmFsaWQgRGF0ZSBhbmQgdHJ1ZSBvdGhlcndpc2UuXG4gKiBBcmd1bWVudCBpcyBjb252ZXJ0ZWQgdG8gRGF0ZSB1c2luZyBgdG9EYXRlYC4gU2VlIFt0b0RhdGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlfVxuICogSW52YWxpZCBEYXRlIGlzIGEgRGF0ZSwgd2hvc2UgdGltZSB2YWx1ZSBpcyBOYU4uXG4gKlxuICogVGltZSB2YWx1ZSBvZiBEYXRlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjkuMS4xXG4gKlxuICogQHBhcmFtIHsqfSBkYXRlIC0gdGhlIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZSBpcyB2YWxpZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoMjAxNCwgMSwgMzEpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsdWUsIGNvbnZlcnRhYmxlIGludG8gYSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZCgxMzkzODA0ODAwMDAwKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgnJykpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVmFsaWQoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICBpZiAoIWlzRGF0ZShkaXJ0eURhdGUpICYmIHR5cGVvZiBkaXJ0eURhdGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHJldHVybiAhaXNOYU4oTnVtYmVyKGRhdGUpKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn0iLCAiaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgYWRkTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZE1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjMwLjc1MFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufSIsICJpbXBvcnQgYWRkTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9hZGRNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdWJNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgc3VidHJhY3RlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA3NTAgbWlsbGlzZWNvbmRzIGZyb20gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1Yk1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjI5LjI1MFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCAtYW1vdW50KTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fREFZID0gODY0MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENEYXlPZlllYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mWWVhclRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICB2YXIgZGlmZmVyZW5jZSA9IHRpbWVzdGFtcCAtIHN0YXJ0T2ZZZWFyVGltZXN0YW1wO1xuICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gTUlMTElTRUNPTkRTX0lOX0RBWSkgKyAxO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gMTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENGdWxsWWVhcih5ZWFyICsgMSwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHllYXIgPSBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5ID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDSVNPV2VlayhkYXRlKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGF0ZSkuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJ2YXIgZGVmYXVsdE9wdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXdPcHRpb25zO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGZpcnN0V2Vla09mTmV4dFllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENGdWxsWWVhcih5ZWFyICsgMSwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mTmV4dFllYXIsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZlRoaXNZZWFyLCBvcHRpb25zKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcbiAgdmFyIHllYXIgPSBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vlay5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWsuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrLCBvcHRpb25zKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENXZWVrKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIsIHRhcmdldExlbmd0aCkge1xuICB2YXIgc2lnbiA9IG51bWJlciA8IDAgPyAnLScgOiAnJztcbiAgdmFyIG91dHB1dCA9IE1hdGguYWJzKG51bWJlcikudG9TdHJpbmcoKTtcbiAgd2hpbGUgKG91dHB1dC5sZW5ndGggPCB0YXJnZXRMZW5ndGgpIHtcbiAgICBvdXRwdXQgPSAnMCcgKyBvdXRwdXQ7XG4gIH1cbiAgcmV0dXJuIHNpZ24gKyBvdXRwdXQ7XG59IiwgImltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKi9cbnZhciBmb3JtYXR0ZXJzID0ge1xuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4pIHtcbiAgICAvLyBGcm9tIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtMzEvdHIzNS1kYXRlcy5odG1sI0RhdGVfRm9ybWF0X3Rva2Vuc1xuICAgIC8vIHwgWWVhciAgICAgfCAgICAgeSB8IHl5IHwgICB5eXkgfCAgeXl5eSB8IHl5eXl5IHxcbiAgICAvLyB8LS0tLS0tLS0tLXwtLS0tLS0tfC0tLS18LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS18XG4gICAgLy8gfCBBRCAxICAgICB8ICAgICAxIHwgMDEgfCAgIDAwMSB8ICAwMDAxIHwgMDAwMDEgfFxuICAgIC8vIHwgQUQgMTIgICAgfCAgICAxMiB8IDEyIHwgICAwMTIgfCAgMDAxMiB8IDAwMDEyIHxcbiAgICAvLyB8IEFEIDEyMyAgIHwgICAxMjMgfCAyMyB8ICAgMTIzIHwgIDAxMjMgfCAwMDEyMyB8XG4gICAgLy8gfCBBRCAxMjM0ICB8ICAxMjM0IHwgMzQgfCAgMTIzNCB8ICAxMjM0IHwgMDEyMzQgfFxuICAgIC8vIHwgQUQgMTIzNDUgfCAxMjM0NSB8IDQ1IHwgMTIzNDUgfCAxMjM0NSB8IDEyMzQ1IHxcblxuICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRva2VuID09PSAneXknID8geWVhciAlIDEwMCA6IHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSAnTScgPyBTdHJpbmcobW9udGggKyAxKSA6IGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDRGF0ZSgpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0VVRDSG91cnMoKSAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTtcbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gJ2FtJyA/ICdhLm0uJyA6ICdwLm0uJztcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ01pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHZhciBudW1iZXJPZkRpZ2l0cyA9IHRva2VuLmxlbmd0aDtcbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgICB2YXIgZnJhY3Rpb25hbFNlY29uZHMgPSBNYXRoLmZsb29yKG1pbGxpc2Vjb25kcyAqIE1hdGgucG93KDEwLCBudW1iZXJPZkRpZ2l0cyAtIDMpKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGZyYWN0aW9uYWxTZWNvbmRzLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAiaW1wb3J0IGdldFVUQ0RheU9mWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENEYXlPZlllYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENJU09XZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbmltcG9ydCBsaWdodEZvcm1hdHRlcnMgZnJvbSBcIi4uL2xpZ2h0Rm9ybWF0dGVycy9pbmRleC5qc1wiO1xudmFyIGRheVBlcmlvZEVudW0gPSB7XG4gIGFtOiAnYW0nLFxuICBwbTogJ3BtJyxcbiAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gIG5vb246ICdub29uJyxcbiAgbW9ybmluZzogJ21vcm5pbmcnLFxuICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICBldmVuaW5nOiAnZXZlbmluZycsXG4gIG5pZ2h0OiAnbmlnaHQnXG59O1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgTWlsbGlzZWNvbmRzIGluIGRheSAgICAgICAgICAgIHxcbiAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAqIHwgIGMgIHwgU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsgIHwgIEMqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGYgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEYqIHwgRGF5IG9mIHdlZWsgaW4gbW9udGggICAgICAgICAgIHxcbiAqIHwgIGcqIHwgTW9kaWZpZWQgSnVsaWFuIGRheSAgICAgICAgICAgIHwgIEcgIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGkhIHwgSVNPIGRheSBvZiB3ZWVrICAgICAgICAgICAgICAgIHwgIEkhIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgIHxcbiAqIHwgIGoqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHwgIEoqIHwgTG9jYWxpemVkIGhvdXIgdy9vIGRheSBwZXJpb2QgIHxcbiAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGwqIHwgKGRlcHJlY2F0ZWQpICAgICAgICAgICAgICAgICAgIHwgIEwgIHwgU3RhbmQtYWxvbmUgbW9udGggICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG8hIHwgT3JkaW5hbCBudW1iZXIgbW9kaWZpZXIgICAgICAgIHwgIE8gIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHAhIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgIHwgIFAhIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgIHxcbiAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHIqIHwgUmVsYXRlZCBHcmVnb3JpYW4geWVhciAgICAgICAgIHwgIFIhIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAqIHwgIHUgIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgIHwgIFUqIHwgQ3ljbGljIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHYqIHwgVGltZXpvbmUgKGdlbmVyaWMgbm9uLWxvY2F0LikgIHwgIFYqIHwgVGltZXpvbmUgKGxvY2F0aW9uKSAgICAgICAgICAgIHxcbiAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHggIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgIHwgIFggIHwgVGltZXpvbmUgKElTTy04NjAxKSAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgIHxcbiAqIHwgIHogIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgISBhcmUgbm9uLXN0YW5kYXJkLCBidXQgaW1wbGVtZW50ZWQgYnkgZGF0ZS1mbnM6XG4gKiAtIGBvYCBtb2RpZmllcyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gdHVybiBpdCBpbnRvIGFuIG9yZGluYWwgKHNlZSBgZm9ybWF0YCBkb2NzKVxuICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICogICBpLmUuIDcgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gKiAtIGBJYCBpcyBJU08gd2VlayBvZiB5ZWFyLCBhcyBvcHBvc2VkIHRvIGB3YCB3aGljaCBpcyBsb2NhbCB3ZWVrIG9mIHllYXIuXG4gKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqICAgYFJgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSWAgYW5kIGBpYFxuICogICBmb3IgdW5pdmVyc2FsIElTTyB3ZWVrLW51bWJlcmluZyBkYXRlLCB3aGVyZWFzXG4gKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAqICAgZm9yIHdlZWstbnVtYmVyaW5nIGRhdGUgc3BlY2lmaWMgdG8gdGhlIGxvY2FsZS5cbiAqIC0gYFBgIGlzIGxvbmcgbG9jYWxpemVkIGRhdGUgZm9ybWF0XG4gKiAtIGBwYCBpcyBsb25nIGxvY2FsaXplZCB0aW1lIGZvcm1hdFxuICovXG5cbnZhciBmb3JtYXR0ZXJzID0ge1xuICAvLyBFcmFcbiAgRzogZnVuY3Rpb24gRyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZXJhID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpID4gMCA/IDEgOiAwO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEFELCBCQ1xuICAgICAgY2FzZSAnRyc6XG4gICAgICBjYXNlICdHRyc6XG4gICAgICBjYXNlICdHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQSwgQlxuICAgICAgY2FzZSAnR0dHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93J1xuICAgICAgICB9KTtcbiAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0XG4gICAgICBjYXNlICdHR0dHJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ3lvJykge1xuICAgICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHllYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICBZOiBmdW5jdGlvbiBZKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBzaWduZWRXZWVrWWVhciA9IGdldFVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgdmFyIHdlZWtZZWFyID0gc2lnbmVkV2Vla1llYXIgPiAwID8gc2lnbmVkV2Vla1llYXIgOiAxIC0gc2lnbmVkV2Vla1llYXI7XG5cbiAgICAvLyBUd28gZGlnaXQgeWVhclxuICAgIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgICAgdmFyIHR3b0RpZ2l0WWVhciA9IHdlZWtZZWFyICUgMTAwO1xuICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0d29EaWdpdFllYXIsIDIpO1xuICAgIH1cblxuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAnWW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrWWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICBSOiBmdW5jdGlvbiBSKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGlzb1dlZWtZZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGF0ZSk7XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRXh0ZW5kZWQgeWVhci4gVGhpcyBpcyBhIHNpbmdsZSBudW1iZXIgZGVzaWduYXRpbmcgdGhlIHllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0uXG4gIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBsb2NhbGl6ZXJzIGFyZSBCLkMuIHllYXJzOlxuICAvLyB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICAvLyB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICAvLyB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICAvLyB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICAvLyB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICAvLyBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gIC8vIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZC5cbiAgdTogZnVuY3Rpb24gdShkYXRlLCB0b2tlbikge1xuICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gUXVhcnRlclxuICBROiBmdW5jdGlvbiBRKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ1EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ1FRJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAnUW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ1FRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ1FRUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAnUVFRUSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBxdWFydGVyXG4gIHE6IGZ1bmN0aW9uIHEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAncSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAncXEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdxbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAncXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAncXFxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdxcXFxJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ00nOlxuICAgICAgY2FzZSAnTU0nOlxuICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLk0oZGF0ZSwgdG9rZW4pO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdNTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ01NTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdNTU1NJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgbW9udGhcbiAgTDogZnVuY3Rpb24gTChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTEwnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdMbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ0xMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTExMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ0xMTEwnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCB3ZWVrIG9mIHllYXJcbiAgdzogZnVuY3Rpb24gdyhkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2VlayA9IGdldFVUQ1dlZWsoZGF0ZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRva2VuID09PSAnd28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWsgb2YgeWVhclxuICBJOiBmdW5jdGlvbiBJKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBpc29XZWVrID0gZ2V0VVRDSVNPV2VlayhkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdJbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb1dlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnZG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0RhdGUoKSwge1xuICAgICAgICB1bml0OiAnZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBEYXkgb2YgeWVhclxuICBEOiBmdW5jdGlvbiBEKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZlllYXIgPSBnZXRVVENEYXlPZlllYXIoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnRG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXlPZlllYXIsIHtcbiAgICAgICAgdW5pdDogJ2RheU9mWWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRheU9mWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHdlZWtcbiAgRTogZnVuY3Rpb24gRShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ0UnOlxuICAgICAgY2FzZSAnRUUnOlxuICAgICAgY2FzZSAnRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdFRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ0VFRUUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIGRheSBvZiB3ZWVrXG4gIGU6IGZ1bmN0aW9uIGUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pXG4gICAgICBjYXNlICdlJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdlZSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlICdlbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2VlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2VlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnZWVlZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWtcbiAgYzogZnVuY3Rpb24gYyhkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKVxuICAgICAgY2FzZSAnYyc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnY2MnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlICdjbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2NjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnY2NjYyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uIGkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMlxuICAgICAgY2FzZSAnaSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTtcbiAgICAgIC8vIDAyXG4gICAgICBjYXNlICdpaSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMm5kXG4gICAgICBjYXNlICdpbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb0RheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2lpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2lpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnaWlpaSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNLCBQTSwgbWlkbmlnaHQsIG5vb25cbiAgYjogZnVuY3Rpb24gYihkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPT09IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA9PT0gMCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5taWRuaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2InOlxuICAgICAgY2FzZSAnYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2JiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlICdiYmJiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2JiYmInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHRcbiAgQjogZnVuY3Rpb24gQihkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPj0gMTcpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uZXZlbmluZztcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmFmdGVybm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDQpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubW9ybmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5uaWdodDtcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnQic6XG4gICAgICBjYXNlICdCQic6XG4gICAgICBjYXNlICdCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdobycpIHtcbiAgICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdIbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDSG91cnMoKSwge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLkgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTExXVxuICBLOiBmdW5jdGlvbiBLKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgIGlmICh0b2tlbiA9PT0gJ0tvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24gayhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDI0O1xuICAgIGlmICh0b2tlbiA9PT0gJ2tvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnbW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ01pbnV0ZXMoKSwge1xuICAgICAgICB1bml0OiAnbWludXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMubShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ3NvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHtcbiAgICAgICAgdW5pdDogJ3NlY29uZCdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuUyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApXG4gIFg6IGZ1bmN0aW9uIFgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZiAodGltZXpvbmVPZmZzZXQgPT09IDApIHtcbiAgICAgIHJldHVybiAnWic7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICdYJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYYFxuICAgICAgY2FzZSAnWFhYWCc6XG4gICAgICBjYXNlICdYWCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWFhgXG4gICAgICBjYXNlICdYWFhYWCc6XG4gICAgICBjYXNlICdYWFgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpXG4gIHg6IGZ1bmN0aW9uIHgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAneCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eGBcbiAgICAgIGNhc2UgJ3h4eHgnOlxuICAgICAgY2FzZSAneHgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHh4YFxuICAgICAgY2FzZSAneHh4eHgnOlxuICAgICAgY2FzZSAneHh4JzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoR01UKVxuICBPOiBmdW5jdGlvbiBPKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ08nOlxuICAgICAgY2FzZSAnT08nOlxuICAgICAgY2FzZSAnT09PJzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgJ09PT08nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0aW9uKVxuICB6OiBmdW5jdGlvbiB6KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ3onOlxuICAgICAgY2FzZSAnenonOlxuICAgICAgY2FzZSAnenp6JzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgJ3p6enonOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBTZWNvbmRzIHRpbWVzdGFtcFxuICB0OiBmdW5jdGlvbiB0KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IE1hdGguZmxvb3Iob3JpZ2luYWxEYXRlLmdldFRpbWUoKSAvIDEwMDApO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gIFQ6IGZ1bmN0aW9uIFQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gb3JpZ2luYWxEYXRlLmdldFRpbWUoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lU2hvcnQob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKTtcbiAgdmFyIG1pbnV0ZXMgPSBhYnNPZmZzZXQgJSA2MDtcbiAgaWYgKG1pbnV0ZXMgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiArIFN0cmluZyhob3Vycyk7XG4gIH1cbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICByZXR1cm4gc2lnbiArIFN0cmluZyhob3VycykgKyBkZWxpbWl0ZXIgKyBhZGRMZWFkaW5nWmVyb3MobWludXRlcywgMik7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICBpZiAob2Zmc2V0ICUgNjAgPT09IDApIHtcbiAgICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gICAgcmV0dXJuIHNpZ24gKyBhZGRMZWFkaW5nWmVyb3MoTWF0aC5hYnMob2Zmc2V0KSAvIDYwLCAyKTtcbiAgfVxuICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcik7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApLCAyKTtcbiAgdmFyIG1pbnV0ZXMgPSBhZGRMZWFkaW5nWmVyb3MoYWJzT2Zmc2V0ICUgNjAsIDIpO1xuICByZXR1cm4gc2lnbiArIGhvdXJzICsgZGVsaW1pdGVyICsgbWludXRlcztcbn1cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgInZhciBkYXRlTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcbnZhciB0aW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIHRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAncCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwcCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcbnZhciBkYXRlVGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlVGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICB2YXIgbWF0Y2hSZXN1bHQgPSBwYXR0ZXJuLm1hdGNoKC8oUCspKHArKT8vKSB8fCBbXTtcbiAgdmFyIGRhdGVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMV07XG4gIHZhciB0aW1lUGF0dGVybiA9IG1hdGNoUmVzdWx0WzJdO1xuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG4gIHZhciBkYXRlVGltZUZvcm1hdDtcbiAgc3dpdGNoIChkYXRlUGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCd7e2RhdGV9fScsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nKSkucmVwbGFjZSgne3t0aW1lfX0nLCB0aW1lTG9uZ0Zvcm1hdHRlcih0aW1lUGF0dGVybiwgZm9ybWF0TG9uZykpO1xufTtcbnZhciBsb25nRm9ybWF0dGVycyA9IHtcbiAgcDogdGltZUxvbmdGb3JtYXR0ZXIsXG4gIFA6IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlclxufTtcbmV4cG9ydCBkZWZhdWx0IGxvbmdGb3JtYXR0ZXJzOyIsICIvKipcbiAqIEdvb2dsZSBDaHJvbWUgYXMgb2YgNjcuMC4zMzk2Ljg3IGludHJvZHVjZWQgdGltZXpvbmVzIHdpdGggb2Zmc2V0IHRoYXQgaW5jbHVkZXMgc2Vjb25kcy5cbiAqIFRoZXkgdXN1YWxseSBhcHBlYXIgZm9yIGRhdGVzIHRoYXQgZGVub3RlIHRpbWUgYmVmb3JlIHRoZSB0aW1lem9uZXMgd2VyZSBpbnRyb2R1Y2VkXG4gKiAoZS5nLiBmb3IgJ0V1cm9wZS9QcmFndWUnIHRpbWV6b25lIHRoZSBvZmZzZXQgaXMgR01UKzAwOjU3OjQ0IGJlZm9yZSAxIE9jdG9iZXIgMTg5MVxuICogYW5kIEdNVCswMTowMDowMCBhZnRlciB0aGF0IGRhdGUpXG4gKlxuICogRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIHRoZSBvZmZzZXQgaW4gbWludXRlcyBhbmQgd291bGQgcmV0dXJuIDU3IGZvciB0aGUgZXhhbXBsZSBhYm92ZSxcbiAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWV6b25lIG9mZnNldCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0YWtlcyBzZWNvbmRzIGluIGFjY291bnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkge1xuICB2YXIgdXRjRGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCksIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpKTtcbiAgdXRjRGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgLSB1dGNEYXRlLmdldFRpbWUoKTtcbn0iLCAidmFyIHByb3RlY3RlZERheU9mWWVhclRva2VucyA9IFsnRCcsICdERCddO1xudmFyIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zID0gWydZWScsICdZWVlZJ107XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGlmICh0b2tlbiA9PT0gJ1lZWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0QnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRgIGluc3RlYWQgb2YgYERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0REJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfVxufSIsICJ2YXIgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBzZWNvbmQnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICB4U2Vjb25kczoge1xuICAgIG9uZTogJzEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICBoYWxmQU1pbnV0ZTogJ2hhbGYgYSBtaW51dGUnLFxuICBsZXNzVGhhblhNaW51dGVzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgbWludXRlJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6ICcxIG1pbnV0ZScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgYWJvdXRYSG91cnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIGhvdXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4SG91cnM6IHtcbiAgICBvbmU6ICcxIGhvdXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4RGF5czoge1xuICAgIG9uZTogJzEgZGF5JyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBkYXlzJ1xuICB9LFxuICBhYm91dFhXZWVrczoge1xuICAgIG9uZTogJ2Fib3V0IDEgd2VlaycsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIHhXZWVrczoge1xuICAgIG9uZTogJzEgd2VlaycsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogJ2Fib3V0IDEgbW9udGgnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgeE1vbnRoczoge1xuICAgIG9uZTogJzEgbW9udGgnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIHllYXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICB4WWVhcnM6IHtcbiAgICBvbmU6ICcxIHllYXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBvdmVyWFllYXJzOiB7XG4gICAgb25lOiAnb3ZlciAxIHllYXInLFxuICAgIG90aGVyOiAnb3ZlciB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIGFsbW9zdFhZZWFyczoge1xuICAgIG9uZTogJ2FsbW9zdCAxIHllYXInLFxuICAgIG90aGVyOiAnYWxtb3N0IHt7Y291bnR9fSB5ZWFycydcbiAgfVxufTtcbnZhciBmb3JtYXREaXN0YW5jZSA9IGZ1bmN0aW9uIGZvcm1hdERpc3RhbmNlKHRva2VuLCBjb3VudCwgb3B0aW9ucykge1xuICB2YXIgcmVzdWx0O1xuICB2YXIgdG9rZW5WYWx1ZSA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXTtcbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWU7XG4gIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm9uZTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm90aGVyLnJlcGxhY2UoJ3t7Y291bnR9fScsIGNvdW50LnRvU3RyaW5nKCkpO1xuICB9XG4gIGlmIChvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLmFkZFN1ZmZpeCkge1xuICAgIGlmIChvcHRpb25zLmNvbXBhcmlzb24gJiYgb3B0aW9ucy5jb21wYXJpc29uID4gMCkge1xuICAgICAgcmV0dXJuICdpbiAnICsgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgJyBhZ28nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdERpc3RhbmNlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZvcm1hdExvbmdGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIC8vIFRPRE86IFJlbW92ZSBTdHJpbmcoKVxuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICB2YXIgZm9ybWF0ID0gYXJncy5mb3JtYXRzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHNbYXJncy5kZWZhdWx0V2lkdGhdO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH07XG59IiwgImltcG9ydCBidWlsZEZvcm1hdExvbmdGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZEZvcm1hdExvbmdGbi9pbmRleC5qc1wiO1xudmFyIGRhdGVGb3JtYXRzID0ge1xuICBmdWxsOiAnRUVFRSwgTU1NTSBkbywgeScsXG4gIGxvbmc6ICdNTU1NIGRvLCB5JyxcbiAgbWVkaXVtOiAnTU1NIGQsIHknLFxuICBzaG9ydDogJ01NL2RkL3l5eXknXG59O1xudmFyIHRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiAnaDptbTpzcyBhIHp6enonLFxuICBsb25nOiAnaDptbTpzcyBhIHonLFxuICBtZWRpdW06ICdoOm1tOnNzIGEnLFxuICBzaG9ydDogJ2g6bW0gYSdcbn07XG52YXIgZGF0ZVRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbG9uZzogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIG1lZGl1bTogJ3t7ZGF0ZX19LCB7e3RpbWV9fScsXG4gIHNob3J0OiAne3tkYXRlfX0sIHt7dGltZX19J1xufTtcbnZhciBmb3JtYXRMb25nID0ge1xuICBkYXRlOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIHRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiB0aW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgZGF0ZVRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlVGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRMb25nOyIsICJ2YXIgZm9ybWF0UmVsYXRpdmVMb2NhbGUgPSB7XG4gIGxhc3RXZWVrOiBcIidsYXN0JyBlZWVlICdhdCcgcFwiLFxuICB5ZXN0ZXJkYXk6IFwiJ3llc3RlcmRheSBhdCcgcFwiLFxuICB0b2RheTogXCIndG9kYXkgYXQnIHBcIixcbiAgdG9tb3Jyb3c6IFwiJ3RvbW9ycm93IGF0JyBwXCIsXG4gIG5leHRXZWVrOiBcImVlZWUgJ2F0JyBwXCIsXG4gIG90aGVyOiAnUCdcbn07XG52YXIgZm9ybWF0UmVsYXRpdmUgPSBmdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZSh0b2tlbiwgX2RhdGUsIF9iYXNlRGF0ZSwgX29wdGlvbnMpIHtcbiAgcmV0dXJuIGZvcm1hdFJlbGF0aXZlTG9jYWxlW3Rva2VuXTtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRSZWxhdGl2ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRMb2NhbGl6ZUZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkaXJ0eUluZGV4LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLmNvbnRleHQgPyBTdHJpbmcob3B0aW9ucy5jb250ZXh0KSA6ICdzdGFuZGFsb25lJztcbiAgICB2YXIgdmFsdWVzQXJyYXk7XG4gICAgaWYgKGNvbnRleHQgPT09ICdmb3JtYXR0aW5nJyAmJiBhcmdzLmZvcm1hdHRpbmdWYWx1ZXMpIHtcbiAgICAgIHZhciBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRGb3JtYXR0aW5nV2lkdGggfHwgYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2RlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIF93aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy52YWx1ZXNbX3dpZHRoXSB8fCBhcmdzLnZhbHVlc1tfZGVmYXVsdFdpZHRoXTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gYXJncy5hcmd1bWVudENhbGxiYWNrID8gYXJncy5hcmd1bWVudENhbGxiYWNrKGRpcnR5SW5kZXgpIDogZGlydHlJbmRleDtcbiAgICAvLyBAdHMtaWdub3JlOiBGb3Igc29tZSByZWFzb24gVHlwZVNjcmlwdCBqdXN0IGRvbid0IHdhbnQgdG8gbWF0Y2ggaXQsIG5vIG1hdHRlciBob3cgaGFyZCB3ZSB0cnkuIEkgY2hhbGxlbmdlIHlvdSB0byB0cnkgdG8gcmVtb3ZlIGl0IVxuICAgIHJldHVybiB2YWx1ZXNBcnJheVtpbmRleF07XG4gIH07XG59IiwgImltcG9ydCBidWlsZExvY2FsaXplRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRMb2NhbGl6ZUZuL2luZGV4LmpzXCI7XG52YXIgZXJhVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnQicsICdBJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0JDJywgJ0FEJ10sXG4gIHdpZGU6IFsnQmVmb3JlIENocmlzdCcsICdBbm5vIERvbWluaSddXG59O1xudmFyIHF1YXJ0ZXJWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWycxJywgJzInLCAnMycsICc0J10sXG4gIGFiYnJldmlhdGVkOiBbJ1ExJywgJ1EyJywgJ1EzJywgJ1E0J10sXG4gIHdpZGU6IFsnMXN0IHF1YXJ0ZXInLCAnMm5kIHF1YXJ0ZXInLCAnM3JkIHF1YXJ0ZXInLCAnNHRoIHF1YXJ0ZXInXVxufTtcblxuLy8gTm90ZTogaW4gRW5nbGlzaCwgdGhlIG5hbWVzIG9mIGRheXMgb2YgdGhlIHdlZWsgYW5kIG1vbnRocyBhcmUgY2FwaXRhbGl6ZWQuXG4vLyBJZiB5b3UgYXJlIG1ha2luZyBhIG5ldyBsb2NhbGUgYmFzZWQgb24gdGhpcyBvbmUsIGNoZWNrIGlmIHRoZSBzYW1lIGlzIHRydWUgZm9yIHRoZSBsYW5ndWFnZSB5b3UncmUgd29ya2luZyBvbi5cbi8vIEdlbmVyYWxseSwgZm9ybWF0dGVkIGRhdGVzIHNob3VsZCBsb29rIGxpa2UgdGhleSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHNlbnRlbmNlLFxuLy8gZS5nLiBpbiBTcGFuaXNoIGxhbmd1YWdlIHRoZSB3ZWVrZGF5cyBhbmQgbW9udGhzIHNob3VsZCBiZSBpbiB0aGUgbG93ZXJjYXNlLlxudmFyIG1vbnRoVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnSicsICdGJywgJ00nLCAnQScsICdNJywgJ0onLCAnSicsICdBJywgJ1MnLCAnTycsICdOJywgJ0QnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcbiAgd2lkZTogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ11cbn07XG52YXIgZGF5VmFsdWVzID0ge1xuICBuYXJyb3c6IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddLFxuICBzaG9ydDogWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddLFxuICBhYmJyZXZpYXRlZDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcbiAgd2lkZTogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddXG59O1xudmFyIGRheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9XG59O1xudmFyIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfVxufTtcbnZhciBvcmRpbmFsTnVtYmVyID0gZnVuY3Rpb24gb3JkaW5hbE51bWJlcihkaXJ0eU51bWJlciwgX29wdGlvbnMpIHtcbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgLy8gSWYgb3JkaW5hbCBudW1iZXJzIGRlcGVuZCBvbiBjb250ZXh0LCBmb3IgZXhhbXBsZSxcbiAgLy8gaWYgdGhleSBhcmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgZ3JhbW1hdGljYWwgZ2VuZGVycyxcbiAgLy8gdXNlIGBvcHRpb25zLnVuaXRgLlxuICAvL1xuICAvLyBgdW5pdGAgY2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXRlJywgJ2RheU9mWWVhcicsXG4gIC8vICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJy5cblxuICB2YXIgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuICBpZiAocmVtMTAwID4gMjAgfHwgcmVtMTAwIDwgMTApIHtcbiAgICBzd2l0Y2ggKHJlbTEwMCAlIDEwKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnc3QnO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ25kJztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdyZCc7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW1iZXIgKyAndGgnO1xufTtcbnZhciBsb2NhbGl6ZSA9IHtcbiAgb3JkaW5hbE51bWJlcjogb3JkaW5hbE51bWJlcixcbiAgZXJhOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZXJhVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogcXVhcnRlclZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJyxcbiAgICBhcmd1bWVudENhbGxiYWNrOiBmdW5jdGlvbiBhcmd1bWVudENhbGxiYWNrKHF1YXJ0ZXIpIHtcbiAgICAgIHJldHVybiBxdWFydGVyIC0gMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXk6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJyxcbiAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6ICd3aWRlJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsaXplOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoO1xuICAgIHZhciBtYXRjaFBhdHRlcm4gPSB3aWR0aCAmJiBhcmdzLm1hdGNoUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MubWF0Y2hQYXR0ZXJuc1thcmdzLmRlZmF1bHRNYXRjaFdpZHRoXTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2gobWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VQYXR0ZXJucyA9IHdpZHRoICYmIGFyZ3MucGFyc2VQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5wYXJzZVBhdHRlcm5zW2FyZ3MuZGVmYXVsdFBhcnNlV2lkdGhdO1xuICAgIHZhciBrZXkgPSBBcnJheS5pc0FycmF5KHBhcnNlUGF0dGVybnMpID8gZmluZEluZGV4KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pIDogZmluZEtleShwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KTtcbiAgICB2YXIgdmFsdWU7XG4gICAgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2soa2V5KSA6IGtleTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufVxuZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHByZWRpY2F0ZShvYmplY3Rba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBrZXkgPSAwOyBrZXkgPCBhcnJheS5sZW5ndGg7IGtleSsrKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhwYXJzZVJlc3VsdFswXSkgOiBwYXJzZVJlc3VsdFswXTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRNYXRjaEZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qc1wiO1xuaW1wb3J0IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi9pbmRleC5qc1wiO1xudmFyIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcXGQrKSh0aHxzdHxuZHxyZCk/L2k7XG52YXIgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9cXGQrL2k7XG52YXIgbWF0Y2hFcmFQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihifGEpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihiXFwuP1xccz9jXFwuP3xiXFwuP1xccz9jXFwuP1xccz9lXFwuP3xhXFwuP1xccz9kXFwuP3xjXFwuP1xccz9lXFwuPykvaSxcbiAgd2lkZTogL14oYmVmb3JlIGNocmlzdHxiZWZvcmUgY29tbW9uIGVyYXxhbm5vIGRvbWluaXxjb21tb24gZXJhKS9pXG59O1xudmFyIHBhcnNlRXJhUGF0dGVybnMgPSB7XG4gIGFueTogWy9eYi9pLCAvXihhfGMpL2ldXG59O1xudmFyIG1hdGNoUXVhcnRlclBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eWzEyMzRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXnFbMTIzNF0vaSxcbiAgd2lkZTogL15bMTIzNF0odGh8c3R8bmR8cmQpPyBxdWFydGVyL2lcbn07XG52YXIgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7XG4gIGFueTogWy8xL2ksIC8yL2ksIC8zL2ksIC80L2ldXG59O1xudmFyIG1hdGNoTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltqZm1hc29uZF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLFxuICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pXG59O1xudmFyIHBhcnNlTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15qL2ksIC9eZi9pLCAvXm0vaSwgL15hL2ksIC9ebS9pLCAvXmovaSwgL15qL2ksIC9eYS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV0sXG4gIGFueTogWy9eamEvaSwgL15mL2ksIC9ebWFyL2ksIC9eYXAvaSwgL15tYXkvaSwgL15qdW4vaSwgL15qdWwvaSwgL15hdS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV1cbn07XG52YXIgbWF0Y2hEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltzbXR3Zl0vaSxcbiAgc2hvcnQ6IC9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0KS9pLFxuICB3aWRlOiAvXihzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSkvaVxufTtcbnZhciBwYXJzZURheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXnMvaSwgL15tL2ksIC9edC9pLCAvXncvaSwgL150L2ksIC9eZi9pLCAvXnMvaV0sXG4gIGFueTogWy9ec3UvaSwgL15tL2ksIC9edHUvaSwgL153L2ksIC9edGgvaSwgL15mL2ksIC9ec2EvaV1cbn07XG52YXIgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksXG4gIGFueTogL14oW2FwXVxcLj9cXHM/bVxcLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2lcbn07XG52YXIgcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgYW55OiB7XG4gICAgYW06IC9eYS9pLFxuICAgIHBtOiAvXnAvaSxcbiAgICBtaWRuaWdodDogL15taS9pLFxuICAgIG5vb246IC9ebm8vaSxcbiAgICBtb3JuaW5nOiAvbW9ybmluZy9pLFxuICAgIGFmdGVybm9vbjogL2FmdGVybm9vbi9pLFxuICAgIGV2ZW5pbmc6IC9ldmVuaW5nL2ksXG4gICAgbmlnaHQ6IC9uaWdodC9pXG4gIH1cbn07XG52YXIgbWF0Y2ggPSB7XG4gIG9yZGluYWxOdW1iZXI6IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oe1xuICAgIG1hdGNoUGF0dGVybjogbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICBwYXJzZVBhdHRlcm46IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuICB9KSxcbiAgZXJhOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZUVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55JyxcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggKyAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnYW55JyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IG1hdGNoOyIsICJpbXBvcnQgZm9ybWF0RGlzdGFuY2UgZnJvbSBcIi4vX2xpYi9mb3JtYXREaXN0YW5jZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdExvbmcgZnJvbSBcIi4vX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0UmVsYXRpdmUgZnJvbSBcIi4vX2xpYi9mb3JtYXRSZWxhdGl2ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGxvY2FsaXplIGZyb20gXCIuL19saWIvbG9jYWxpemUvaW5kZXguanNcIjtcbmltcG9ydCBtYXRjaCBmcm9tIFwiLi9fbGliL21hdGNoL2luZGV4LmpzXCI7XG4vKipcbiAqIEB0eXBlIHtMb2NhbGV9XG4gKiBAY2F0ZWdvcnkgTG9jYWxlc1xuICogQHN1bW1hcnkgRW5nbGlzaCBsb2NhbGUgKFVuaXRlZCBTdGF0ZXMpLlxuICogQGxhbmd1YWdlIEVuZ2xpc2hcbiAqIEBpc28tNjM5LTIgZW5nXG4gKiBAYXV0aG9yIFNhc2hhIEtvc3MgW0Brb3Nzbm9jb3JwXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20va29zc25vY29ycH1cbiAqIEBhdXRob3IgTGVzaGEgS29zcyBbQGxlc2hha29zc117QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xlc2hha29zc31cbiAqL1xudmFyIGxvY2FsZSA9IHtcbiAgY29kZTogJ2VuLVVTJyxcbiAgZm9ybWF0RGlzdGFuY2U6IGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXRMb25nOiBmb3JtYXRMb25nLFxuICBmb3JtYXRSZWxhdGl2ZTogZm9ybWF0UmVsYXRpdmUsXG4gIGxvY2FsaXplOiBsb2NhbGl6ZSxcbiAgbWF0Y2g6IG1hdGNoLFxuICBvcHRpb25zOiB7XG4gICAgd2Vla1N0YXJ0c09uOiAwIC8qIFN1bmRheSAqLyxcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDFcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsZTsiLCAiaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uLy4uL2xvY2FsZS9lbi1VUy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdExvY2FsZTsiLCAiaW1wb3J0IGlzVmFsaWQgZnJvbSBcIi4uL2lzVmFsaWQvaW5kZXguanNcIjtcbmltcG9ydCBzdWJNaWxsaXNlY29uZHMgZnJvbSBcIi4uL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvZm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGxvbmdGb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbiwgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuLCB0aHJvd1Byb3RlY3RlZEVycm9yIH0gZnJvbSBcIi4uL19saWIvcHJvdGVjdGVkVG9rZW5zL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi9fbGliL2RlZmF1bHRMb2NhbGUvaW5kZXguanNcIjsgLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG52YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcXHcpXFwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuLy8gVGhpcyBSZWdFeHAgY2F0Y2hlcyBzeW1ib2xzIGVzY2FwZWQgYnkgcXVvdGVzLCBhbmQgYWxzb1xuLy8gc2VxdWVuY2VzIG9mIHN5bWJvbHMgUCwgcCwgYW5kIHRoZSBjb21iaW5hdGlvbnMgbGlrZSBgUFBQUFBQUHBwcHBwYFxudmFyIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG52YXIgZXNjYXBlZFN0cmluZ1JlZ0V4cCA9IC9eJyhbXl0qPyknPyQvO1xudmFyIGRvdWJsZVF1b3RlUmVnRXhwID0gLycnL2c7XG52YXIgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vO1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXQgdGhlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LiBUaGUgcmVzdWx0IG1heSB2YXJ5IGJ5IGxvY2FsZS5cbiAqXG4gKiA+IFx1MjZBMFx1RkUwRiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBgZm9ybWF0YCB0b2tlbnMgZGlmZmVyIGZyb20gTW9tZW50LmpzIGFuZCBvdGhlciBsaWJyYXJpZXMuXG4gKiA+IFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIFRoZSBjaGFyYWN0ZXJzIHdyYXBwZWQgYmV0d2VlbiB0d28gc2luZ2xlIHF1b3RlcyBjaGFyYWN0ZXJzICgnKSBhcmUgZXNjYXBlZC5cbiAqIFR3byBzaW5nbGUgcXVvdGVzIGluIGEgcm93LCB3aGV0aGVyIGluc2lkZSBvciBvdXRzaWRlIGEgcXVvdGVkIHNlcXVlbmNlLCByZXByZXNlbnQgYSAncmVhbCcgc2luZ2xlIHF1b3RlLlxuICogKHNlZSB0aGUgbGFzdCBleGFtcGxlKVxuICpcbiAqIEZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGJhc2VkIG9uIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGVcbiAqIHdpdGggYSBmZXcgYWRkaXRpb25zIChzZWUgbm90ZSA3IGJlbG93IHRoZSB0YWJsZSkuXG4gKlxuICogQWNjZXB0ZWQgcGF0dGVybnM6XG4gKiB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXR0ZXJuIHwgUmVzdWx0IGV4YW1wbGVzICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLXxcbiAqIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEcuLkdHRyAgfCBBRCwgQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHICAgIHwgQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3QgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHR0cgICB8IEEsIEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ2FsZW5kYXIgeWVhciAgICAgICAgICAgICAgICAgICB8IHkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5byAgICAgIHwgNDR0aCwgMXN0LCAwdGgsIDE3dGggICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5ICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eXkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICB8IFkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZbyAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDIwMTd0aCAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWVkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgICB8IFIgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUiAgICAgIHwgLTQzLCAwMCwgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSICAgICB8IC0wNDMsIDAwMCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlIgICAgfCAtMDA0MywgMDAwMCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSUiAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1LDcgfFxuICogfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgIHwgdSAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1ICAgICAgfCAtNDMsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXUgICAgIHwgLTA0MywgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dSAgICB8IC0wMDQzLCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXV1ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IFF1YXJ0ZXIgKGZvcm1hdHRpbmcpICAgICAgICAgICAgfCBRICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVFRICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IFF1YXJ0ZXIgKHN0YW5kLWFsb25lKSAgICAgICAgICAgfCBxICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXFxICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IE1vbnRoIChmb3JtYXR0aW5nKSAgICAgICAgICAgICAgfCBNICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU0gICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTSAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU1NICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1vbnRoIChzdGFuZC1hbG9uZSkgICAgICAgICAgICAgfCBMICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTEwgICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTCAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTExMICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgfCB3ICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHd3ICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICAgfCBJICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElJICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICAgfCBkICAgICAgIHwgMSwgMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDMxc3QgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRkICAgICAgfCAwMSwgMDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICAgfCBEICAgICAgIHwgMSwgMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDM2NXRoLCAzNjZ0aCAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREICAgICAgfCAwMSwgMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREQgICAgIHwgMDAxLCAwMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRERERCAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgRGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgICAgICB8IEUuLkVFRSAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFRSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgfCBpICAgICAgIHwgMSwgMiwgMywgLi4uLCA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDd0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpICAgICAgfCAwMSwgMDIsIC4uLiwgMDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWkgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaWkgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgNyAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgIHwgZSAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZSAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWVlICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKHN0YW5kLWFsb25lKSB8IGMgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2MgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjYyAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2MgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjYyAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhLi5hYSAgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhICAgICB8IGFtLCBwbSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWEgICAgfCBhLm0uLCBwLm0uICAgICAgICAgICAgICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhYSAgIHwgYSwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgIHwgYi4uYmIgICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYiAgICAgfCBhbSwgcG0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiICAgIHwgYS5tLiwgcC5tLiwgbm9vbiwgbWlkbmlnaHQgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYmIgICB8IGEsIHAsIG4sIG1pICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgICB8IEIuLkJCQiAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCICAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQkIgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgICB8IGggICAgICAgfCAxLCAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBobyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMTJ0aCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGggICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgICB8IEggICAgICAgfCAwLCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIbyAgICAgIHwgMHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEggICAgICB8IDAwLCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgICB8IEsgICAgICAgfCAxLCAyLCAuLi4sIDExLCAwICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMHRoICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS0sgICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgICB8IGsgICAgICAgfCAyNCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrbyAgICAgIHwgMjR0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2sgICAgICB8IDI0LCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICB8IHMgICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3MgICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgICB8IFMgICAgICAgfCAwLCAxLCAuLi4sIDkgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTICAgICB8IDAwMCwgMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTU1MgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3LyBaKSAgICAgICAgfCBYICAgICAgIHwgLTA4LCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFggICAgICB8IC0wODAwLCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWCAgICAgfCAtMDg6MDAsICswNTozMCwgWiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYICAgIHwgLTA4MDAsICswNTMwLCBaLCArMTIzNDU2ICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWFggICB8IC0wODowMCwgKzA1OjMwLCBaLCArMTI6MzQ6NTYgICAgICB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgICB8IHggICAgICAgfCAtMDgsICswNTMwLCArMDAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eCAgICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4ICAgICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHggICAgfCAtMDgwMCwgKzA1MzAsICswMDAwLCArMTIzNDU2ICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4eCAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCwgKzEyOjM0OjU2IHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgIHwgTy4uLk9PTyB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9PT08gICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyICAgICB8XG4gKiB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSAgfCB6Li4uenp6IHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgNiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgenp6eiAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIsNiAgIHxcbiAqIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgICB8IHQgICAgICAgfCA1MTI5Njk1MjAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0dCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgIHwgVCAgICAgICB8IDUxMjk2OTUyMDkwMCAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRUICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICAgfCBQICAgICAgIHwgMDQvMjkvMTQ1MyAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFAgICAgICB8IEFwciAyOSwgMTQ1MyAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUCAgICAgfCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQICAgIHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgIHwgcCAgICAgICB8IDEyOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwICAgICAgfCAxMjowMDowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHAgICAgIHwgMTI6MDA6MDAgQU0gR01UKzIgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwcCAgICB8IDEyOjAwOjAwIEFNIEdNVCswMjowMCAgICAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgQ29tYmluYXRpb24gb2YgZGF0ZSBhbmQgdGltZSAgICB8IFBwICAgICAgfCAwNC8yOS8xNDUzLCAxMjowMCBBTSAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUHBwICAgIHwgQXByIDI5LCAxNDUzLCAxMjowMDowMCBBTSAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQcHBwICB8IEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFBwcHBwfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgfCAyLDcgICB8XG4gKiBOb3RlczpcbiAqIDEuIFwiRm9ybWF0dGluZ1wiIHVuaXRzIChlLmcuIGZvcm1hdHRpbmcgcXVhcnRlcikgaW4gdGhlIGRlZmF1bHQgZW4tVVMgbG9jYWxlXG4gKiAgICBhcmUgdGhlIHNhbWUgYXMgXCJzdGFuZC1hbG9uZVwiIHVuaXRzLCBidXQgYXJlIGRpZmZlcmVudCBpbiBzb21lIGxhbmd1YWdlcy5cbiAqICAgIFwiRm9ybWF0dGluZ1wiIHVuaXRzIGFyZSBkZWNsaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsYW5ndWFnZVxuICogICAgaW4gdGhlIGNvbnRleHQgb2YgYSBkYXRlLiBcIlN0YW5kLWFsb25lXCIgdW5pdHMgYXJlIGFsd2F5cyBub21pbmF0aXZlIHNpbmd1bGFyOlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTExMTCcsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWQnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTU1NTScsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWR1J2BcbiAqXG4gKiAyLiBBbnkgc2VxdWVuY2Ugb2YgdGhlIGlkZW50aWNhbCBsZXR0ZXJzIGlzIGEgcGF0dGVybiwgdW5sZXNzIGl0IGlzIGVzY2FwZWQgYnlcbiAqICAgIHRoZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoc2VlIGJlbG93KS5cbiAqICAgIElmIHRoZSBzZXF1ZW5jZSBpcyBsb25nZXIgdGhhbiBsaXN0ZWQgaW4gdGFibGUgKGUuZy4gYEVFRUVFRUVFRUVFYClcbiAqICAgIHRoZSBvdXRwdXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBkZWZhdWx0IHBhdHRlcm4gZm9yIHRoaXMgdW5pdCwgdXN1YWxseVxuICogICAgdGhlIGxvbmdlc3Qgb25lIChpbiBjYXNlIG9mIElTTyB3ZWVrZGF5cywgYEVFRUVgKS4gRGVmYXVsdCBwYXR0ZXJucyBmb3IgdW5pdHNcbiAqICAgIGFyZSBtYXJrZWQgd2l0aCBcIjJcIiBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NJykgLy89PiAnTm92J2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTScpIC8vPT4gJ04nYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAzLiBTb21lIHBhdHRlcm5zIGNvdWxkIGJlIHVubGltaXRlZCBsZW5ndGggKHN1Y2ggYXMgYHl5eXl5eXl5YCkuXG4gKiAgICBUaGUgb3V0cHV0IHdpbGwgYmUgcGFkZGVkIHdpdGggemVyb3MgdG8gbWF0Y2ggdGhlIGxlbmd0aCBvZiB0aGUgcGF0dGVybi5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ3l5eXl5eXl5JykgLy89PiAnMDAwMDIwMTcnYFxuICpcbiAqIDQuIGBRUVFRUWAgYW5kIGBxcXFxcWAgY291bGQgYmUgbm90IHN0cmljdGx5IG51bWVyaWNhbCBpbiBzb21lIGxvY2FsZXMuXG4gKiAgICBUaGVzZSB0b2tlbnMgcmVwcmVzZW50IHRoZSBzaG9ydGVzdCBmb3JtIG9mIHRoZSBxdWFydGVyLlxuICpcbiAqIDUuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBwYXR0ZXJucyBhcmUgQi5DLiB5ZWFyczpcbiAqXG4gKiAgICB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICogICAgfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAqICAgIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gKiAgICB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICogICAgfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAqXG4gKiAgICBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gKiAgICB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQ6XG4gKlxuICogICAgfCBZZWFyIHwgYHl5YCB8IGB1dWAgfFxuICogICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuICogICAgfCAxICAgIHwgICAwMSB8ICAgMDEgfFxuICogICAgfCAxNCAgIHwgICAxNCB8ICAgMTQgfFxuICogICAgfCAzNzYgIHwgICA3NiB8ICAzNzYgfFxuICogICAgfCAxNDUzIHwgICA1MyB8IDE0NTMgfFxuICpcbiAqICAgIFRoZSBzYW1lIGRpZmZlcmVuY2UgaXMgdHJ1ZSBmb3IgbG9jYWwgYW5kIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyAoYFlgIGFuZCBgUmApLFxuICogICAgZXhjZXB0IGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBkZXBlbmRlbnQgb24gYG9wdGlvbnMud2Vla1N0YXJ0c09uYFxuICogICAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKGNvbXBhcmUgW2dldElTT1dlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldElTT1dlZWtZZWFyfVxuICogICAgYW5kIFtnZXRXZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRXZWVrWWVhcn0pLlxuICpcbiAqIDYuIFNwZWNpZmljIG5vbi1sb2NhdGlvbiB0aW1lem9uZXMgYXJlIGN1cnJlbnRseSB1bmF2YWlsYWJsZSBpbiBgZGF0ZS1mbnNgLFxuICogICAgc28gcmlnaHQgbm93IHRoZXNlIHRva2VucyBmYWxsIGJhY2sgdG8gR01UIHRpbWV6b25lcy5cbiAqXG4gKiA3LiBUaGVzZSBwYXR0ZXJucyBhcmUgbm90IGluIHRoZSBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiAgICAtIGBpYDogSVNPIGRheSBvZiB3ZWVrXG4gKiAgICAtIGBJYDogSVNPIHdlZWsgb2YgeWVhclxuICogICAgLSBgUmA6IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKiAgICAtIGB0YDogc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYFRgOiBtaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBvYDogb3JkaW5hbCBudW1iZXIgbW9kaWZpZXJcbiAqICAgIC0gYFBgOiBsb25nIGxvY2FsaXplZCBkYXRlXG4gKiAgICAtIGBwYDogbG9uZyBsb2NhbGl6ZWQgdGltZVxuICpcbiAqIDguIGBZWWAgYW5kIGBZWVlZYCB0b2tlbnMgcmVwcmVzZW50IHdlZWstbnVtYmVyaW5nIHllYXJzIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIHllYXJzLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogOS4gYERgIGFuZCBgRERgIHRva2VucyByZXByZXNlbnQgZGF5cyBvZiB0aGUgeWVhciBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCBkYXlzIG9mIHRoZSBtb250aC5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgLSB0aGUgc3RyaW5nIG9mIHRva2Vuc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlPTFdIC0gdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpc1xuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyIHRva2VucyBgWVlgIGFuZCBgWVlZWWA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgZGF5IG9mIHllYXIgdG9rZW5zIGBEYCBhbmQgYEREYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgbG9jYWxpemVgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgZm9ybWF0TG9uZ2AgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLndlZWtTdGFydHNPbmAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDZcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDdcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMTEgRmVicnVhcnkgMjAxNCBpbiBtaWRkbGUtZW5kaWFuIGZvcm1hdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCAxLCAxMSksICdNTS9kZC95eXl5JylcbiAqIC8vPT4gJzAyLzExLzIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAyIEp1bHkgMjAxNCBpbiBFc3BlcmFudG86XG4gKiBpbXBvcnQgeyBlb0xvY2FsZSB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbydcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyKSwgXCJkbyAnZGUnIE1NTU0geXl5eVwiLCB7XG4gKiAgIGxvY2FsZTogZW9Mb2NhbGVcbiAqIH0pXG4gKiAvLz0+ICcyLWEgZGUganVsaW8gMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXNjYXBlIHN0cmluZyBieSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyczpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxNSksIFwiaCAnbycnY2xvY2snXCIpXG4gKiAvLz0+IFwiMyBvJ2Nsb2NrXCJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXQoZGlydHlEYXRlLCBkaXJ0eUZvcm1hdFN0ciwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX29wdGlvbnMkbG9jYWxlLCBfcmVmMiwgX3JlZjMsIF9yZWY0LCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZTIsIF9vcHRpb25zJGxvY2FsZTIkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLCBfcmVmNSwgX3JlZjYsIF9yZWY3LCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZTMsIF9vcHRpb25zJGxvY2FsZTMkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMywgX2RlZmF1bHRPcHRpb25zJGxvY2FsNDtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBmb3JtYXRTdHIgPSBTdHJpbmcoZGlydHlGb3JtYXRTdHIpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgbG9jYWxlID0gKF9yZWYgPSAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX29wdGlvbnMkbG9jYWxlICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRsb2NhbGUgOiBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBkZWZhdWx0TG9jYWxlO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmMiA9IChfcmVmMyA9IChfcmVmNCA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTIgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTIub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMiRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUyJG9wdGkuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmNCAhPT0gdm9pZCAwID8gX3JlZjQgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmNSA9IChfcmVmNiA9IChfcmVmNyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTMub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUzJG9wdGkud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNyAhPT0gdm9pZCAwID8gX3JlZjcgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY2ICE9PSB2b2lkIDAgPyBfcmVmNiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsNC53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY1ICE9PSB2b2lkIDAgPyBfcmVmNSA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5sb2NhbGl6ZSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGxvY2FsaXplIHByb3BlcnR5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUuZm9ybWF0TG9uZykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGZvcm1hdExvbmcgcHJvcGVydHknKTtcbiAgfVxuICB2YXIgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIGlmICghaXNWYWxpZChvcmlnaW5hbERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB9XG5cbiAgLy8gQ29udmVydCB0aGUgZGF0ZSBpbiBzeXN0ZW0gdGltZXpvbmUgdG8gdGhlIHNhbWUgZGF0ZSBpbiBVVEMrMDA6MDAgdGltZXpvbmUuXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gVVRDIGZ1bmN0aW9ucyB3aWxsIGJlIGltcGxlbWVudGVkLCBsb2NhbGVzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIHRoZW0uXG4gIC8vIFNlZSBhbiBpc3N1ZSBhYm91dCBVVEMgZnVuY3Rpb25zOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM3NlxuICB2YXIgdGltZXpvbmVPZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSk7XG4gIHZhciB1dGNEYXRlID0gc3ViTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSwgdGltZXpvbmVPZmZzZXQpO1xuICB2YXIgZm9ybWF0dGVyT3B0aW9ucyA9IHtcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSxcbiAgICB3ZWVrU3RhcnRzT246IHdlZWtTdGFydHNPbixcbiAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICBfb3JpZ2luYWxEYXRlOiBvcmlnaW5hbERhdGVcbiAgfTtcbiAgdmFyIHJlc3VsdCA9IGZvcm1hdFN0ci5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSAncCcgfHwgZmlyc3RDaGFyYWN0ZXIgPT09ICdQJykge1xuICAgICAgdmFyIGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJykubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICAvLyBSZXBsYWNlIHR3byBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyB3aXRoIG9uZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyXG4gICAgaWYgKHN1YnN0cmluZyA9PT0gXCInJ1wiKSB7XG4gICAgICByZXR1cm4gXCInXCI7XG4gICAgfVxuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwiJ1wiKSB7XG4gICAgICByZXR1cm4gY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZyk7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXR0ZXIodXRjRGF0ZSwgc3Vic3RyaW5nLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHApKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAnICsgZmlyc3RDaGFyYWN0ZXIgKyAnYCcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkge1xuICB2YXIgbWF0Y2hlZCA9IGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHApO1xuICBpZiAoIW1hdGNoZWQpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgXCInXCIpO1xufSIsICJleHBvcnQgY29uc3QgcG9pbnRzTm90ZU1hanVyaXR5ID0gMTAwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzTWFqdXJpdHkgPSAxMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlID0gNTAwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlID0gMjAwMDtcclxuZXhwb3J0IGNvbnN0IGF2YXRhckluaXRDb250ZW50ID0gIGAjIEF2YXRhclxyXG5cclxufCAgICAgICAgfCAgICAgfFxyXG58IC0tLS0tLSB8IC0tLSB8XHJcbnwgTGV2ZWwgIHwgMCAgICB8XHJcbnwgUG9pbnRzIHwgMCAgICB8XHJcbl5sZXZlbEFuZFBvaW50c1x0XHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFtFeHByaXJpZW5jZV1cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxyXG4gICAgZGF0YTogWzEwMDBdXHJcbnhNaW46IDBcclxueE1heDogMTAwMFxyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDQwJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG5pbmRleEF4aXM6IHlcclxueFRpdGxlOiBcInByb2dyZXNzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgICAgICAgICAgICAgfCAgICAgfCAgICAgICB8XHJcbnwgLS0tLS0tLS0tLS0gfCAtLS0gfCAtLS0tLSB8XHJcbnwgKipkYWlseSBOb3RlcyoqIHwgKjUwMEVQKiB8ICoqMC8yKiogfFxyXG5eZGFpbHlOb3Rlc0NoYWxsZW5nZVxyXG58ICB8ICAgICB8fFxyXG58IC0tLS0gfCAtLS0gfCAtLS0gfFxyXG58ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKiowLzcqKiAgIHxcclxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFtOb3Rlc11cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IGRheXMgZG9uZSBpbiBhIHJvd1xyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xyXG4gICAgZGF0YTogWzddXHJcbnhNaW46IDBcclxueE1heDogN1xyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDQwJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG5pbmRleEF4aXM6IHlcclxueFRpdGxlOiBcImRheXNcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCBMZXZlbCB8IENvdW50IHxcclxufCA6LS0tOiB8IDotLS06IHxcclxufCBNYWp1cml0eSA1IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNSwgJzUnLCAnNVx1MjdBMVx1RkUwRicsICc1XHUyQjA3XHVGRTBGJywgJzVcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSA0IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNCwgJzQnLCAnNFx1MjdBMVx1RkUwRicsICc0XHUyQjA3XHVGRTBGJywgJzRcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAzIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMywgJzMnLCAnM1x1MjdBMVx1RkUwRicsICczXHUyQjA3XHVGRTBGJywgJzNcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAyIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMiwgJzInLCAnMlx1MjdBMVx1RkUwRicsICcyXHUyQjA3XHVGRTBGJywgJzJcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAxIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMSwgJzEnLCAnMVx1MjdBMVx1RkUwRicsICcxXHUyQjA3XHVGRTBGJywgJzFcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAwIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMCwgJzAnLCAnMFx1MjdBMVx1RkUwRicsICcwXHUyQjA3XHVGRTBGJywgJzBcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxuXHJcblxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbMCwgMCwgMF1cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IG1vZGlmaWVkXHJcbiAgICBkYXRhOiBbMCwgMCwgMF1cclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA4MCAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbnlUaXRsZTogXCJOdW1iZXIgb2YgTm90ZXNcIlxyXG54VGl0bGU6IFwiTW9udGhzXCJcclxueE1pbjogMFxyXG5cXGBcXGBcXGBcclxuXkNoYXJ0TW9udGhcclxuXHJcblxyXG4jIyMgQmFkZ2VzXHJcbiMjIyMgYWNoaWV2ZWRcclxuXHJcblxyXG4jIyMjIG91dHN0YW5kaW5nXHJcbmxldmVsIDU6ICpFbmxpZ2h0ZW5lZCBOb3ZpY2UqXHJcbmxldmVsIDEwOiAqQ3VyaW91cyBDb25ub2lzc2V1cipcclxubGV2ZWwgMjA6ICpCcmFpbmlhYyBUcmFpbGJsYXplcipcclxubGV2ZWwgMjc6ICpTY2hvbGFybHkgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDM1OiAqSW5mbyBOaW5qYSBNYXN0ZXIqXHJcbmxldmVsIDQyOiAqV2lzZSBPd2wgR3VydSpcclxubGV2ZWwgNTA6ICpFaW5zdGVpbiBJbmNhcm5hdGUqXHJcbmxldmVsIDYwOiAqTWFzdGVybWluZCBTYWdlKlxyXG5sZXZlbCA3NTogKkNlcmVicmFsIE1hZXN0cm8qXHJcbmxldmVsIDgyOiAqWmVuIEtub3dsZWRnZSBLZWVwZXIqXHJcbmxldmVsIDkwOiAqR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkKlxyXG5sZXZlbCAxMDA6ICpPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZypcclxuXHJcblxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDUqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNSBvciBub3RlLW1hdHVyaXR5ID0gXCI1XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNCoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA0IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gM1xyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMyBvciBub3RlLW1hdHVyaXR5ID0gXCIzXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDJcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAxXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAxIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMFxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMCBvciBub3RlLW1hdHVyaXR5ID0gXCIwXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcbmA7XHJcbiIsICJpbXBvcnQgeyBURmlsZSwgQXBwLCB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb24oY2hhckNvdW50VG90YWw6IG51bWJlciwgbGF5ZXIyY291bnQ6IG51bWJlciwgbGF5ZXIzY291bnQ6IG51bWJlcik6IG51bWJlciB7XHJcblx0Y29uc3QgcGVyY2VudExheWVyMiA9IGxheWVyMmNvdW50ICogMTAwIC8gY2hhckNvdW50VG90YWw7XHJcbiAgICBjb25zdCBwZXJjZW50TGF5ZXIzID0gbGF5ZXIzY291bnQgKiAxMDAgLyBsYXllcjJjb3VudDtcclxuXHR2YXIgbGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdHZhciBsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0dmFyIG1hanVyaXR5ID0gMDtcclxuXHRpZiAoY2hhckNvdW50VG90YWwgPCAzMDAwKSB7XHJcblx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBOb3RlIGlzIG5vdCBsb25nIGVub3VnaCB0byBnZXQgaW50byBjYWxjdWxhdGlvbiBmb3IgbWFqdXJpdHkuIFRoZSB0b3RhbCBjaGFyYWN0ZXIgY291bnQgaXMgJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0aWYgKHBlcmNlbnRMYXllcjIgPT0gMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMTApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDIwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAzMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGF5ZXIzY291bnQgPT0gMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMTApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDIwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGF5ZXIybWFqdXJpdHkgPT0gMSAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMTtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gMiAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPj0gMyAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAoKGxheWVyMm1hanVyaXR5ID09IDMgfHwgbGF5ZXIybWFqdXJpdHkgPT0gNCkgJiYgKGxheWVyM21hanVyaXR5ID09IDQgfHwgbGF5ZXIzbWFqdXJpdHkgPT0gNSkpIHtcclxuXHRcdFx0bWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSA1ICYmIGxheWVyM21hanVyaXR5ID09IDUpIHtcclxuXHRcdFx0bWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0XHJcblx0Ly9jb25zb2xlLmxvZyhgbGF5ZXIybWFqdXJpdHk6ICR7bGF5ZXIybWFqdXJpdHl9IFxcdGxheWVyM21hanVyaXR5OiAke2xheWVyM21hanVyaXR5fSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBwZXJjZW50TGF5ZXIyOiAke3BlcmNlbnRMYXllcjJ9IFxcdHBlcmNlbnRMYXllcjM6ICR7cGVyY2VudExheWVyM30gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgY2hhckNvdW50VG90YWw6ICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0cmV0dXJuIG1hanVyaXR5O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZyk6IHsgY2hhckNvdW50OiBudW1iZXI7IGhpZ2hsaWdodGVkQ291bnQ6IG51bWJlcjsgYm9sZENvdW50OiBudW1iZXIgfSB7XHJcbiAgXHJcblx0Y29uc3QgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uID0gZmlsZW5hbWU7IC8vLnNsaWNlKDAsIC1maWxlbmFtZS5sZW5ndGgpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gZm9ybWF0dGluZyBzeW1ib2xzXHJcblx0Y29uc3Qgc3RyaXBwZWRDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9bKl9+YF0vZywgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBoZWFkaW5ncyB0aGF0IG1hdGNoIHRoZSBmaWxlbmFtZVxyXG5cdGNvbnN0IGhlYWRpbmdSZWdleCA9IC9eKCMrKVxccyguKikkL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MgPSBzdHJpcHBlZENvbnRlbnQucmVwbGFjZShoZWFkaW5nUmVnZXgsIChtYXRjaCwgcDEsIHAyKSA9PiB7XHJcblx0XHJcblx0XHQvLyBjb25zb2xlLmxvZyhgcDI6ICR7cDJ9YCk7XHJcblx0XHRpZiAocDIgPT09IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtYXRjaDtcclxuXHR9KTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRIZWFkaW5nczogJHtjb250ZW50V2l0aG91dEhlYWRpbmdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWV0YWRhdGEgYmxvY2tzIGZyb20gY291bnRcclxuXHRjb25zdCBtZXRhZGF0YVJlZ2V4ID0gL14tLS1bXFxzXFxTXSo/LS0tL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEgPSBjb250ZW50V2l0aG91dEhlYWRpbmdzLnJlcGxhY2UobWV0YWRhdGFSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TWV0YWRhdGE6ICR7Y29udGVudFdpdGhvdXRNZXRhZGF0YX1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlICN0YWdzIGZyb20gY291bnRcclxuXHRjb25zdCB0YWdSZWdleCA9IC8jW15cXHNdKy9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0VGFncyA9IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEucmVwbGFjZSh0YWdSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0VGFnczogJHtjb250ZW50V2l0aG91dFRhZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBsaW5rcyBhbmQgV2lraXBlZGlhLWxpbmtzIGZyb20gY291bnRcclxuXHRjb25zdCBsaW5rUmVnZXggPSAvXFxbLio/XFxdXFwoLio/XFwpfFxcW1xcWy4qP1xcXVxcXS9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TGlua3MgPSBjb250ZW50V2l0aG91dFRhZ3MucmVwbGFjZShsaW5rUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dExpbmtzOiAke2NvbnRlbnRXaXRob3V0TGlua3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBibGFuayBuZXdsaW5lc1xyXG5cdGNvbnN0IGZpbHRlcmVkQ29udGVudDogc3RyaW5nID0gY29udGVudFdpdGhvdXRMaW5rc1xyXG5cdC5zcGxpdCgnXFxuJykgLy8gU3BsaXQgdGhlIGNvbnRlbnQgaW50byBhbiBhcnJheSBvZiBsaW5lc1xyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpIC8vIEZpbHRlciBvdXQgbGluZXMgdGhhdCBhcmUgZW1wdHkgb3IgY29udGFpbiBvbmx5IHdoaXRlc3BhY2VcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICctLS0nKSAvLyByZW1vdmUgLS0tIG9uIHNpbmdsZSBsaW5lc1xyXG5cdC5qb2luKCdcXG4nKTsgLy8gSm9pbiB0aGUgcmVtYWluaW5nIGxpbmVzIGJhY2sgaW50byBhIHN0cmluZywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzXHJcblx0Ly8gY29uc29sZS5sb2coYGZpbHRlcmVkQ29udGVudDogJHtmaWx0ZXJlZENvbnRlbnR9YCk7XHJcblxyXG5cdC8vIENvdW50IHRoZSByZW1haW5pbmcgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGNoYXJDb3VudCA9IGZpbHRlcmVkQ29udGVudC5sZW5ndGg7XHJcblx0Ly8gY29uc29sZS5sb2coYGNoYXJDb3VudDogJHtjaGFyQ291bnR9YCk7XHJcblxyXG5cclxuXHQvLyBjYWxjdWxhdGUgTGF5ZXIgMiAmIDMgTGVuZ3RoXHJcblxyXG5cdC8vIENvdW50IHRoZSBoaWdobGlnaHRlZCBhbmQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0bGV0IGhpZ2hsaWdodGVkQ291bnQgPSAwO1xyXG5cdGxldCBib2xkQ291bnQgPSAwO1xyXG4gIFxyXG5cdHZhciBsYXllcjJleGNsdWRlID0gJz0nXHJcblx0dmFyIGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0Ly8gdG8gaGF2ZSB0aGUgcmVnIGV4IGNvcnJlY3QuIG90aGVyd2lzZSBpdCB3aWxsIGdldCBzdHVjIHdpdGggKiouXHJcblx0aWYobGF5ZXIzID09ICcqKicpe1xyXG5cdFx0bGF5ZXIzID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdH1cclxuXHRpZihsYXllcjIgPT0gJyoqJyl7XHJcblx0XHRsYXllcjIgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnPSdcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnXFxcXConXHJcblx0fVxyXG4gIFx0XHJcblxyXG5cdGNvbnN0IGhpZ2hsaWdodFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjJ9W14ke2xheWVyMmV4Y2x1ZGV9XSske2xheWVyMn1gLCBcImdcIik7XHJcbiAgICBjb25zdCBib2xkUmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyM31bXiR7bGF5ZXIzZXhjbHVkZX1dKyR7bGF5ZXIzfWAsIFwiZ1wiKTtcclxuICBcclxuXHQvLyBDb3VudCBoaWdobGlnaHRlZCBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgaGlnaGxpZ2h0ZWRNYXRjaGVzID0gY29udGVudC5tYXRjaChoaWdobGlnaHRSZWdleCk7XHJcblx0aWYgKGhpZ2hsaWdodGVkTWF0Y2hlcykge1xyXG5cdCAgaGlnaGxpZ2h0ZWRDb3VudCA9IGhpZ2hsaWdodGVkTWF0Y2hlcy5qb2luKFwiXCIpLmxlbmd0aCAtIChoaWdobGlnaHRlZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJz09J1xyXG5cdCAgLy8gZmlyc3QgdGFrZSB0aGUgbGF5ZXIyIChoaWdobGlnaHRlZENvdW50KSBhbmQgcnVuIG9uIHRoaXMgdGhlICdib2xkUmVnZXgnXHJcblx0ICAvLyBDb3VudCBib2xkIGNoYXJhY3RlcnNcclxuXHQgIGNvbnN0IGxheWVyMlN0cmluZyA9IGhpZ2hsaWdodGVkTWF0Y2hlcy5qb2luKFwiXCIpO1xyXG5cdCAgY29uc3QgYm9sZE1hdGNoZXMgPSBsYXllcjJTdHJpbmcubWF0Y2goYm9sZFJlZ2V4KTtcclxuXHQgIGlmIChib2xkTWF0Y2hlcykge1xyXG5cdCAgICBib2xkQ291bnQgPSBib2xkTWF0Y2hlcy5qb2luKFwiXCIpLmxlbmd0aCAtIChib2xkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnKionXHJcblx0ICB9XHJcblx0fVxyXG4gIFxyXG5cdFxyXG5cdFxyXG4gIFxyXG5cdHJldHVybiB7IGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50IH07XHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZXZlbE9mTWF0dXJpdHkobm90ZUxlbmd0aDogbnVtYmVyLCBsZW5ndGhPZlRpdGxlOiBudW1iZXIsIElubGlua3M6IG51bWJlciwgb3V0Z29pbmdMaW5rczogbnVtYmVyLCBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBub3RlTGVuZ3RoOiAke25vdGVMZW5ndGh9XFx0bGVuZ3RoT2ZUaXRsZTogJHtsZW5ndGhPZlRpdGxlfVxcdElubGlua3M6ICR7SW5saW5rc31cXHRvdXRnb2luZ0xpbmtzOiAke291dGdvaW5nTGlua3N9YClcclxuXHRcclxuXHQvLyBkZWNpZGUgaWYgbm90ZUxlbmd0aC1tYWp1cml0eSBvciBwcm9ncmVzc2l2ZVN1bS1tYWp1cml0eSBzaGFsbCBiZSB1c2VkXHJcblx0dmFyIGxlbmd0aE1hanVyaXR5ID0gMDtcclxuXHRpZihub3RlTGVuZ3RoID49IHByb2dyZXNzaXZlU3VtTWFqdXJpdHkpIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gbm90ZUxlbmd0aDtcclxuXHR9IGVsc2Uge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5O1xyXG5cdH1cclxuXHRcclxuXHRjb25zdCB0b3RhbFdlaWdodCA6IG51bWJlciA9IGxlbmd0aE1hanVyaXR5ICsgbGVuZ3RoT2ZUaXRsZSArIElubGlua3MgKyBvdXRnb2luZ0xpbmtzO1xyXG5cdGNvbnN0IGF2ZXJhZ2VXZWlnaHQgPSB0b3RhbFdlaWdodCAvIDU7XHJcblx0Ly8gY29uc29sZS5sb2coYHRvdGFsV2VpZ2h0OiAke3RvdGFsV2VpZ2h0fVxcdGF2ZXJhZ2VXZWlnaHQ6ICR7YXZlcmFnZVdlaWdodH1gKVxyXG5cdGlmIChhdmVyYWdlV2VpZ2h0IDwgMC41KSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMSkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDIpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMy41KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gNCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlT3V0bGlua3Mob3V0bGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG91dGxpbmtzOiAke291dGxpbmtzfWApXHJcblx0aWYgKG91dGxpbmtzIDwgMikge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDMpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA1KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgOSkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTIpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUlubGlua3MobnVtSW5saW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvL3ZhciBwcm96ZW50SW5saW5rcyA9IG51bUlubGlua3MgKiAxMDAgLyBudW1BbGxGaWxlcztcclxuXHQvL2NvbnNvbGUubG9nKGBudW1JbmxpbmtzOiAke251bUlubGlua3N9XFx0bnVtQWxsRmlsZXM6ICR7bnVtQWxsRmlsZXN9XFx0cHJvemVudElubGlua3M6ICR7cHJvemVudElubGlua3N9YClcclxuXHQvKmlmIChwcm96ZW50SW5saW5rcyA8IDAuMDA1IHx8IHByb3plbnRJbmxpbmtzID4gMC4xKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgKi8gaWYgKG51bUlubGlua3MgPT0gMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgNCkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgOCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDE2KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPj0gMTYgJiYgbnVtSW5saW5rcyA8IDUwMCApIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZURpcmVjdGlvbihyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRsZXQgcmF0aW5nID0gXCJcIlxyXG5cdGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPiByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDdcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA2XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA9PSByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTI3QTFcdUZFMEZcIlxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlwiXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIGlmIChmaWxlbmFtZS5sZW5ndGggPCAzMCkge1xyXG5cdHJldHVybiAwO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgODApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDEwMCkge1xyXG5cdHJldHVybiAzO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTUwKSB7XHJcblx0cmV0dXJuIDU7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxOTApIHtcclxuXHRyZXR1cm4gNDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDIxMCkge1xyXG5cdHJldHVybiAyO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjUwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIHtcclxuXHRyZXR1cm4gMDtcclxuICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU5vdGVMZW5ndGgoY29udGVubGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGlmIChjb250ZW5sZW5ndGggPCAyMDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgNTUwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEwMDApIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTIwMCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyMDAwKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDI1MDApIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMzAwMCkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1iZXJPZk91dGxpbmtzKGFjdGl2ZUZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuXHQvLyBjb25zdCBhY3RpdmVGaWxlOiBURmlsZSB8IG51bGwgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRpZiAoIWFjdGl2ZUZpbGUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHRjb25zdCBpbmxpbmtzID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGFjdGl2ZUZpbGUpPy5saW5rcztcclxuXHRyZXR1cm4gaW5saW5rcyA/IE9iamVjdC5rZXlzKGlubGlua3MpLmxlbmd0aCA6IDA7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgXHJcblx0Y29uc3QgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uID0gZmlsZW5hbWU7IC8vLnNsaWNlKDAsIC1maWxlbmFtZS5sZW5ndGgpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gZm9ybWF0dGluZyBzeW1ib2xzXHJcblx0Y29uc3Qgc3RyaXBwZWRDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9bKl9+YF0vZywgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBoZWFkaW5ncyB0aGF0IG1hdGNoIHRoZSBmaWxlbmFtZVxyXG5cdGNvbnN0IGhlYWRpbmdSZWdleCA9IC9eKCMrKVxccyguKikkL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MgPSBzdHJpcHBlZENvbnRlbnQucmVwbGFjZShoZWFkaW5nUmVnZXgsIChtYXRjaCwgcDEsIHAyKSA9PiB7XHJcblx0XHJcblx0XHQvLyBjb25zb2xlLmxvZyhgcDI6ICR7cDJ9YCk7XHJcblx0XHRpZiAocDIgPT09IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtYXRjaDtcclxuXHR9KTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRIZWFkaW5nczogJHtjb250ZW50V2l0aG91dEhlYWRpbmdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWV0YWRhdGEgYmxvY2tzIGZyb20gY291bnRcclxuXHRjb25zdCBtZXRhZGF0YVJlZ2V4ID0gL14tLS1bXFxzXFxTXSo/LS0tL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEgPSBjb250ZW50V2l0aG91dEhlYWRpbmdzLnJlcGxhY2UobWV0YWRhdGFSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TWV0YWRhdGE6ICR7Y29udGVudFdpdGhvdXRNZXRhZGF0YX1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlICN0YWdzIGZyb20gY291bnRcclxuXHRjb25zdCB0YWdSZWdleCA9IC8jW15cXHNdKy9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0VGFncyA9IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEucmVwbGFjZSh0YWdSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0VGFnczogJHtjb250ZW50V2l0aG91dFRhZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBsaW5rcyBhbmQgV2lraXBlZGlhLWxpbmtzIGZyb20gY291bnRcclxuXHRjb25zdCBsaW5rUmVnZXggPSAvXFxbLio/XFxdXFwoLio/XFwpfFxcW1xcWy4qP1xcXVxcXS9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TGlua3MgPSBjb250ZW50V2l0aG91dFRhZ3MucmVwbGFjZShsaW5rUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dExpbmtzOiAke2NvbnRlbnRXaXRob3V0TGlua3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBibGFuayBuZXdsaW5lc1xyXG5cdGNvbnN0IGZpbHRlcmVkQ29udGVudDogc3RyaW5nID0gY29udGVudFdpdGhvdXRMaW5rc1xyXG5cdC5zcGxpdCgnXFxuJykgLy8gU3BsaXQgdGhlIGNvbnRlbnQgaW50byBhbiBhcnJheSBvZiBsaW5lc1xyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpIC8vIEZpbHRlciBvdXQgbGluZXMgdGhhdCBhcmUgZW1wdHkgb3IgY29udGFpbiBvbmx5IHdoaXRlc3BhY2VcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICctLS0nKSAvLyByZW1vdmUgLS0tIG9uIHNpbmdsZSBsaW5lc1xyXG5cdC5qb2luKCdcXG4nKTsgLy8gSm9pbiB0aGUgcmVtYWluaW5nIGxpbmVzIGJhY2sgaW50byBhIHN0cmluZywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzXHJcblx0Ly8gY29uc29sZS5sb2coYGZpbHRlcmVkQ29udGVudDogJHtmaWx0ZXJlZENvbnRlbnR9YCk7XHJcblxyXG5cdC8vIENvdW50IHRoZSByZW1haW5pbmcgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGNoYXJDb3VudCA9IGZpbHRlcmVkQ29udGVudC5sZW5ndGg7XHJcblx0Ly8gY29uc29sZS5sb2coYGNoYXJDb3VudDogJHtjaGFyQ291bnR9YCk7XHJcblxyXG5cdHJldHVybiBjaGFyQ291bnQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rc19zaW5nbGUoZmlsZV9wYXRoOiBzdHJpbmcsIHZhdWx0X3BhdGg6IHN0cmluZyk6IG51bWJlciB7XHJcblx0Ly8gR2V0IHRoZSBmaWxlbmFtZSBhbmQgZGlyZWN0b3J5IG9mIHRoZSBmaWxlIHdlJ3JlIGNvdW50aW5nIGxpbmtzIHRvXHJcblx0Y29uc3QgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVfcGF0aCk7XHJcblx0Y29uc3QgZGlyZWN0b3J5ID0gcGF0aC5kaXJuYW1lKGZpbGVfcGF0aCk7XHJcblxyXG5cdC8vIENyZWF0ZSBhIHNldCB0byBob2xkIGFsbCB0aGUgZmlsZXMgdGhhdCBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdGNvbnN0IGxpbmtpbmdfZmlsZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xyXG5cclxuXHQvLyBSZWN1cnNpdmVseSBzZWFyY2ggZm9yIGZpbGVzIGluIHRoZSB2YXVsdCBkaXJlY3RvcnkgdGhhdCBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdGNvbnN0IHdhbGtTeW5jID0gKGRpcjogc3RyaW5nLCBmaWxlbGlzdDogc3RyaW5nW10pID0+IHtcclxuXHRcdGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoZGlyKTtcclxuXHRcdGZpbGVsaXN0ID0gZmlsZWxpc3QgfHwgW107XHJcblx0XHRmaWxlcy5mb3JFYWNoKChmaWxlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0aWYgKGZzLnN0YXRTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpKS5pc0RpcmVjdG9yeSgpKSB7XHJcblx0XHRcdFx0ZmlsZWxpc3QgPSB3YWxrU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgZmlsZWxpc3QpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdC8vIElnbm9yZSBub24tbWQgZmlsZXMgYW5kIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRpZiAoIWZpbGUuZW5kc1dpdGgoXCIubWRcIikgfHwgZmlsZSA9PT0gZmlsZW5hbWUpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFJlYWQgdGhlIGZpbGUgYW5kIGxvb2sgZm9yIGxpbmtzIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIFwidXRmLThcIik7XHJcblx0XHRcdFx0ZGF0YS5zcGxpdCgnXFxuJykuZm9yRWFjaCgobGluZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAobGluZS5pbmNsdWRlcyhgW1ske2ZpbGVuYW1lLnNsaWNlKDAsIC0zKX1dXWApIHx8IGxpbmUuaW5jbHVkZXMoYFske2ZpbGVuYW1lLnNsaWNlKDAsIC0zKX1dYCkpIHtcclxuXHRcdFx0XHRcdFx0Ly8gV2UgZm91bmQgYSBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZSFcclxuXHRcdFx0XHRcdFx0bGlua2luZ19maWxlcy5hZGQocGF0aC5yZWxhdGl2ZShkaXJlY3RvcnksIHBhdGguam9pbihkaXIsIGZpbGUpKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIGZpbGVsaXN0O1xyXG5cdH07XHJcblxyXG5cdHdhbGtTeW5jKHZhdWx0X3BhdGgsIFtdKTtcclxuXHJcblx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgYXJlIG1lbnRpb25pbmcgdGhlIGlucHV0IGZpbGVcclxuXHRyZXR1cm4gbGlua2luZ19maWxlcy5zaXplO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3MoZmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG4gICAgY29uc3QgeyBhcHA6IHsgbWV0YWRhdGFDYWNoZTogeyByZXNvbHZlZExpbmtzIH0gfSB9ID0gdGhpcztcclxuICAgIGNvbnN0IHsgcGF0aCB9ID0gZmlsZTtcclxuXHJcbiAgICBjb25zdCBzdW1JbmxpbmtzID0gT2JqZWN0LnZhbHVlcyhyZXNvbHZlZExpbmtzKVxyXG4gICAgICAgIC5tYXAoKHZhbDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSkgPT4gdmFsW3BhdGhdID8/IDApXHJcbiAgICAgICAgLnJlZHVjZSgobGVmdCwgcmlnaHQpID0+IGxlZnQgKyByaWdodCwgMCk7XHJcblxyXG4gICAgcmV0dXJuIHN1bUlubGlua3M7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZUNvdW50TWFwID0gYXN5bmMgKGFwcDogQXBwLCBleGNsdWRlVGFnOiBzdHJpbmcsIGV4Y2x1ZGVGb2xkZXI6IHN0cmluZyk6IFByb21pc2U8TWFwPHN0cmluZywgbnVtYmVyPj4gPT4ge1xyXG5cclxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHJcblx0XHJcblx0Ly8gZmlsZXMgd2l0aCB0aGlzICN0YWdzIGluIHRvIGlnbm9yZVxyXG5cdGxldCBleGNsdWRlZFN1YnN0cmluZ3MgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVUYWcgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBleGNsdWRlVGFnLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRcclxuXHJcblx0Ly8gZm9sZGVycyB0byBpZ25vcmUgLm1kLWZpbGVzIGluXHJcblx0bGV0IGV4Y2x1ZGVkRm9sZGVycyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZUZvbGRlciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IGV4Y2x1ZGVGb2xkZXIuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdGV4Y2x1ZGVkRm9sZGVycy5wdXNoKCcub2JzaWRpYW4nLCAnLnRyYXNoJyk7IC8vIGhhcmRjb2RlIHRoZSBiYXNpYyBmb2xkZXJzXHJcblx0XHJcbiAgICBjb25zdCBmaWxlQ291bnRNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cclxuXHRcdGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTtcclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcblxyXG5cdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblxyXG4gICAgICAgIGlmICghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuICAgICAgICB9XHJcblx0XHRcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsZUNvdW50TWFwO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlTWFwID0gYXN5bmMgKGFwcDogQXBwLCBleGNsdWRlVGFnOiBzdHJpbmcsIGV4Y2x1ZGVGb2xkZXI6IHN0cmluZyk6IFByb21pc2U8VEZpbGVbXT4gPT4ge1xyXG5cclxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHJcblx0Ly8gZmlsZXMgd2l0aCB0aGlzICN0YWdzIGluIHRvIGlnbm9yZVxyXG5cdGxldCBleGNsdWRlZFN1YnN0cmluZ3MgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVUYWcgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBleGNsdWRlVGFnLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZFN1YnN0cmluZ3M6ICR7ZXhjbHVkZWRTdWJzdHJpbmdzfWApXHJcblx0Ly8gZm9sZGVycyB0byBpZ25vcmUgLm1kLWZpbGVzIGluXHJcblx0bGV0IGV4Y2x1ZGVkRm9sZGVycyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZUZvbGRlciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IGV4Y2x1ZGVGb2xkZXIuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdGV4Y2x1ZGVkRm9sZGVycy5wdXNoKCcub2JzaWRpYW4nLCAnLnRyYXNoJyk7IC8vIGhhcmRjb2RlIHRoZSBiYXNpYyBmb2xkZXJzXHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRGb2xkZXJzOiAke2V4Y2x1ZGVkRm9sZGVyc31gKVx0XHJcbiAgICBsZXQgZmlsZUFycmF5OiBURmlsZVtdID0gW107XHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cclxuICAgICAgICBjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdC8vY29uc29sZS5sb2coYGZpbGUucGF0aDogJHtmaWxlLnBhdGh9YClcclxuXHRcdGlmICgoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgfHwgZXhjbHVkZVRhZy5sZW5ndGggPT09IDApICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBmaWxlICR7ZmlsZX0gZ2V0J3MgYWRkZWQuYClcclxuXHRcdFx0ZmlsZUFycmF5LnB1c2goZmlsZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlsZUFycmF5O1xyXG59O1xyXG4iLCAiaW1wb3J0IHtURmlsZX0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdENyZWF0ZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdENyZWF0ZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5jdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcbiAgXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RNb2RpZmllZEZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0TW9kaWZpZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0TW9kaWZpZWRGaWxlLnN0YXQubXRpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RNb2RpZmllZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RNb2RpZmllZEZpbGU7XHJcbn0gIFxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3REYXRlRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0XHRpZiAoZmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RDcmVhdGVkRmlsZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtb250aHNCZXR3ZWVuKHN0YXJ0TW9udGg6IERhdGUsIGVuZE1vbnRoOiBEYXRlKTogbnVtYmVyIHtcclxuXHRsZXQgbW9udGhzID0gKGVuZE1vbnRoLmdldE1vbnRoKCkgLSBzdGFydE1vbnRoLmdldE1vbnRoKCkpICsgMTtcclxuXHRpZiAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSA+IHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkge1xyXG5cdFx0bW9udGhzICs9IChlbmRNb250aC5nZXRGdWxsWWVhcigpIC0gc3RhcnRNb250aC5nZXRGdWxsWWVhcigpKSoxMjtcclxuXHR9XHJcblx0cmV0dXJuIG1vbnRocztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvbkRhdGVzKGZpbGVzOiBURmlsZVtdKTogQXJyYXk8RGF0ZT4ge1xyXG5cdGNvbnN0IGNyZWF0aW9uRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XHJcbiAgXHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRjcmVhdGlvbkRhdGVzLnB1c2gobmV3IERhdGUoZmlsZS5zdGF0LmN0aW1lKSk7XHJcblx0fVxyXG4gIFxyXG5cdHJldHVybiBjcmVhdGlvbkRhdGVzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGlmaWNhdGlvbkRhdGVzKGZpbGVzOiBURmlsZVtdKTogQXJyYXk8RGF0ZT4ge1xyXG5cdGNvbnN0IGNyZWF0aW9uRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XHJcbiAgXHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRjcmVhdGlvbkRhdGVzLnB1c2gobmV3IERhdGUoZmlsZS5zdGF0Lm10aW1lKSk7XHJcblx0fVxyXG4gIFxyXG5cdHJldHVybiBjcmVhdGlvbkRhdGVzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0Rm9ybWF0KHlfYXhpczogc3RyaW5nLCBjb3VudHNTdHJpbmdNb2Q6IHN0cmluZywgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRsZXQgbW9uYXRzYmVncmVuenVuZyA9IG51bGxcclxuXHRpZiAoY2hhcnRSZWR1emllcnVuZ01vbmF0ZSA9PSAwKXtcclxuXHRcdG1vbmF0c2JlZ3Jlbnp1bmcgPSAwXHJcblx0fSBlbHNlIHtcclxuXHRcdG1vbmF0c2JlZ3Jlbnp1bmcgPSBjb3VudHNTdHJpbmdNb2Quc3BsaXQoJywnKS5sZW5ndGggLSBjaGFydFJlZHV6aWVydW5nTW9uYXRlXHJcblx0fVxyXG5cdFxyXG5cdC8vY29uc3QgbW9uYXRzYmVncmVuenVuZyA9IGxlbmd0aGNvdW50c1N0cmluZ0NyZWF0ZSAtIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdHJldHVybiBcImBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbXCIgKyB5X2F4aXMgKyBcIl1cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBtb2RpZmllZFxcbiAgICBkYXRhOiBbXCIgKyBjb3VudHNTdHJpbmdNb2QgKyBcIl1cXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogODAgJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxueVRpdGxlOiBcXFwiTnVtYmVyIG9mIE5vdGVzXFxcIlxcbnhUaXRsZTogXFxcIk1vbnRoc1xcXCJcXG54TWluOiBcIiArIG1vbmF0c2JlZ3Jlbnp1bmcgKyBcIlxcbmBgYFwiO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUNoYXJ0Q29udGVudCAoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgbmV3Q29udGVudDogc3RyaW5nKSB7XHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0aWYgKGxpbmUgPT09IFwiXkNoYXJ0TW9udGhcIikge1xyXG5cdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRpZiAocmVmZXJlbmNlICE9IG51bGwpe1xyXG5cdFx0ZW5kID0gcmVmZXJlbmNlO1xyXG5cdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAxOTtcclxuXHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3Q29udGVudCwgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgICBsZXZlbDogc3RyaW5nO1xyXG4gIH1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lmUmVjZWl2ZUFCYWRnZShsZXZlbE9sZDogbnVtYmVyLCBsZXZlbE5ldzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gIGxldCByZWNlaXZlQmFkZ2UgPSBmYWxzZVxyXG4gIGZvciAobGV0IGk9MDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKXtcclxuICAgIGlmIChsZXZlbE9sZCA8IGJhZGdlTGV2ZWxzW2ldICYmIGxldmVsTmV3ID49IGJhZGdlTGV2ZWxzW2ldKXtcclxuICAgICAgcmVjZWl2ZUJhZGdlID0gdHJ1ZVxyXG4gICAgfSBcclxuICB9XHJcbiAgcmV0dXJuIHJlY2VpdmVCYWRnZVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyLCBpbmZvcm06IGJvb2xlYW4pOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiwgbGV2ZWw6IFwibGV2ZWwgNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiAsIGxldmVsOiBcImxldmVsIDEwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiAsIGxldmVsOiBcImxldmVsIDI3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2UgT3dsIEd1cnVcIiwgZGVzY3JpcHRpb246IFwiV2hvby1ob28hIFlvdSd2ZSBhY2hpZXZlZCAnV2lzZSBPd2wgR3VydScgc3RhdHVzLiBZb3VyIHdpc2RvbSBpcyBsZWdlbmRhcnksIGFuZCB5b3VyIGhvb3RzIG9mIGtub3dsZWRnZSBlY2hvIHRocm91Z2ggdGhlIGZvcmVzdCBvZiBpZ25vcmFuY2UhXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFaW5zdGVpbiBJbmNhcm5hdGVcIiwgZGVzY3JpcHRpb246IFwiRXVyZWthISBZb3UndmUgYmVjb21lIGFuICdFaW5zdGVpbiBJbmNhcm5hdGUsJyBwdXNoaW5nIHRoZSBib3VuZGFyaWVzIG9mIHVuZGVyc3RhbmRpbmcgYW5kIGJlbmRpbmcgdGhlIGZhYnJpYyBvZiBrbm93bGVkZ2UgdG8geW91ciB3aWxsIVwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTWFzdGVybWluZCBTYWdlXCIsIGRlc2NyaXB0aW9uOiBcIk1hZ25pZmljZW50ISBZb3UndmUgYXNjZW5kZWQgdG8gdGhlIHJhbmsgb2YgJ01hc3Rlcm1pbmQgU2FnZSwnIGd1aWRpbmcgdGhlIHJpdmVycyBvZiBpbmZvcm1hdGlvbiBhbmQgZW5saWdodGVuaW5nIGFsbCB3aG8gc2VlayB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDZXJlYnJhbCBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZpc3NpbW8hIFlvdSdyZSBub3cgYSAnQ2VyZWJyYWwgTWFlc3RybywnIGNvbmR1Y3RpbmcgdGhlIHN5bXBob255IG9mIGtub3dsZWRnZSB3aXRoIHRoZSBmaW5lc3NlIG9mIGEgdmlydHVvc28gY29uZHVjdG9yIVwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiWmVuIEtub3dsZWRnZSBLZWVwZXJcIiwgZGVzY3JpcHRpb246IFwiU2VyZW5pdHkgYWNoaWV2ZWQhIEFzIGEgJ1plbiBLbm93bGVkZ2UgS2VlcGVyLCcgeW91IG1haW50YWluIGEgdHJhbnF1aWwgbWluZCB3aGlsZSBtYW5hZ2luZyB2YXN0IHBvb2xzIG9mIGtub3dsZWRnZSB3aXRoIGdyYWNlIGFuZCBwb2lzZS5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZFwiLCBkZXNjcmlwdGlvbjogXCJBbGwgaGFpbCB0aGUgJ0dyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCEnIFlvdSB3aWVsZCB0aGUga25vd2xlZGdlIG9mIGFnZXMgYW5kIGhvbGQgdGhlIGtleXMgdG8gdW5sb2NrIHRoZSBnYXRlcyBvZiB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZ1wiLCBkZXNjcmlwdGlvbjogXCJDb25ncmF0dWxhdGlvbnMsIG9oIHdpc2Ugb25lISBZb3UndmUgYXR0YWluZWQgdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgZW5saWdodGVubWVudCBhcyB0aGUgJ09tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nLicgWW91ciB1bmRlcnN0YW5kaW5nIGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgd2lzZG9tIGlzIGFzIHZhc3QgYXMgdGhlIGNvc21vcyBpdHNlbGYhXCIsIGxldmVsOiBcImxldmVsIDEwMFwiICB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNbaW5kZXhdXHJcbiAgfVxyXG4gIFxyXG5cclxuXHJcbiAgZXhwb3J0ICBmdW5jdGlvbiBnZXRCYWRnZUZvckluaXRMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzAsIDMsIDcsIDE1LCAyMywgMzAsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lc0luaXQ6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIFNlZWtlciBJbml0aWF0ZVwiLCBkZXNjcmlwdGlvbjogXCJXZWxjb21lIHRvIHRoZSBqb3VybmV5IG9mIGtub3dsZWRnZSEgQXMgYSAnTG9yZSBTZWVrZXIgSW5pdGlhdGUsJyB5b3UndmUgdGFrZW4geW91ciBmaXJzdCBzdGVwcyBpbnRvIHRoZSB3b3JsZCBvZiBvcmdhbml6ZWQgd2lzZG9tLiBZb3VyIHF1ZXN0IGhhcyBqdXN0IGJlZ3VuLCBhbmQgd2l0aCBlYWNoIG5vdGUgeW91IG1ha2UsIHlvdSBsYXkgdGhlIGZvdW5kYXRpb24gZm9yIGEgZnV0dXJlIHJpY2ggd2l0aCBpbnNpZ2h0cyBhbmQgdW5kZXJzdGFuZGluZy4gWW91ciBqb3VybmV5IHN0YXJ0cyBoZXJlLCBhbmQgdGhlIHBhdGggYWhlYWQgaXMgZmlsbGVkIHdpdGggcG90ZW50aWFsIGFuZCBkaXNjb3ZlcnkuXCIsIGxldmVsOiBcImxldmVsIDFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBBcHByZW50aWNlXCIsIGRlc2NyaXB0aW9uOiBcIllvdSd2ZSBoaXQgdGhlIGdyb3VuZCBydW5uaW5nIHdpdGggeW91ciBleGlzdGluZyBrbm93bGVkZ2UgdHJlYXN1cmVzISBZb3UncmUgYWxyZWFkeSBhbiAnTG9yZSBBcHByZW50aWNlLCcgYXJtZWQgd2l0aCBhIHdlYWx0aCBvZiB3aXNkb20gYW5kIHJlYWR5IHRvIHNoYXBlIGl0IGZ1cnRoZXIuXCIsIGxldmVsOiBcImxldmVsIDNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2F2dnkgU2Nob2xhclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgZ2l2ZW4geW91IGEgaGVhZCBzdGFydCEgWW91J3JlIG5vdyBhICdTYXZ2eSBTY2hvbGFyLCcgY29uZmlkZW50bHkgZGl2aW5nIGludG8gdGhlIHNlYSBvZiBpbmZvcm1hdGlvbiB3aXRoIGEgdHJlYXN1cmUgdHJvdmUgb2YgaW5zaWdodHMuXCIgLCBsZXZlbDogXCJsZXZlbCA3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhZ2UncyBGb3VuZGF0aW9uXCIsIGRlc2NyaXB0aW9uOiBcIkJ1aWxkaW5nIHVwb24geW91ciBwcmUtZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSBlc3RhYmxpc2hpbmcgdGhlICdTYWdlJ3MgRm91bmRhdGlvbicgZm9yIGFuIGV2ZW4gZ3JhbmRlciBlZGlmaWNlIG9mIGtub3dsZWRnZS4gWW91ciBncm91bmR3b3JrIGlzIGltcHJlc3NpdmUhXCIgLCBsZXZlbDogXCJsZXZlbCAxNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNkb20gU2VlZGxpbmdcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG51cnR1cmVkIHRoZSBncm93dGggb2YgYSAnV2lzZG9tIFNlZWRsaW5nLicgWW91J3JlIGN1bHRpdmF0aW5nIHlvdXIgZ2FyZGVuIG9mIGtub3dsZWRnZSB3aXRoIGNhcmUgYW5kIHBhdGllbmNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgMjNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiUHJvZGlnaW91cyBQcmVwYXJlclwiLCBkZXNjcmlwdGlvbjogXCJUaGFua3MgdG8geW91ciBwcmlvciBlZmZvcnRzLCB5b3UncmUgYSAnUHJvZGlnaW91cyBQcmVwYXJlciwnIHN0YW5kaW5nIHRhbGwgYW1vbmcgeW91ciBub3RlcyBhbmQgcmVhZHkgdG8gY29ucXVlciBuZXcgcmVhbG1zIG9mIHVuZGVyc3RhbmRpbmcuXCIgLCBsZXZlbDogXCJsZXZlbCAzMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFcGljIEVwaXBoYW55IEV4cGxvcmVyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgcGFzdCBub3RlcyBoYXZlIGxlZCB5b3UgdG8gdGhlIGdyYW5kICdFcGljIEVwaXBoYW55IEV4cGxvcmVyJyBzdGF0dXMhIFlvdSd2ZSBhbHJlYWR5IGJlZW4gZG93biBhIGZldyByYWJiaXQgaG9sZXMgYW5kIGNvbWUgb3V0IHdpdGggZGF6emxpbmcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEx1bWluYXJ5XCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBpbGx1bWluYXRpbmcgeW91ciBwYXRoLCB5b3UndmUgYmVjb21lIGEgJ0xvcmUgTHVtaW5hcnksJyBzaGluaW5nIGxpZ2h0IG9uIHRoZSBteXN0ZXJpZXMgb2YgdGhlIHVuaXZlcnNlLCBvbmUgaWRlYSBhdCBhIHRpbWUuXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY3JpYmUgb2YgdGhlIEFuY2llbnRzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgbWFzdGVyeSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFuYWdlbWVudCBoYXMgZWxldmF0ZWQgeW91IHRvIHRoZSBlc3RlZW1lZCByYW5rIG9mIHRoZSAnU2NyaWJlIG9mIHRoZSBBbmNpZW50cy4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSB0cmFuc2Zvcm1lZCBpbnRvIHRyZWFzdXJlcywgYnJpZGdpbmcgdGhlIGdhcCBiZXR3ZWVuIG9sZCB3aXNkb20gYW5kIG5ldyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV1cmVrYSBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkFybWVkIHdpdGggeW91ciBleGlzdGluZyBub3RlcywgeW91J3JlIHRoZSAnRXVyZWthIE1hZXN0cm8sJyBjb21wb3NpbmcgYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSB3aXRoIHRoZSBtZWxvZHkgb2YgZGlzY292ZXJ5LlwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2hyb25pY2xlcyBDaGFtcGlvblwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgc3RhbmRpbmcgYXMgYSB0ZXN0YW1lbnQsIHlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgaWxsdXN0cmlvdXMgJ0Nocm9uaWNsZXMgQ2hhbXBpb24nIGxldmVsLiBZb3VyIGpvdXJuZXkgdGhyb3VnaCB0aW1lJ3MgdGFwZXN0cnkgaGFzIGJyb3VnaHQgZm9ydGggYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSBwYXN0IGFuZCBwcmVzZW50LlwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyXCIsIGRlc2NyaXB0aW9uOiBcIkFzICdUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXIsJyB5b3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFwcGVkIG91dCB1bmNoYXJ0ZWQgdGVycml0b3JpZXMgb2YgdW5kZXJzdGFuZGluZy4gWW91ciBjdXJpb3NpdHkga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciBub3RlcyBhcmUgdGhlIGNvbXBhc3MgZ3VpZGluZyB5b3VyIGV4cGxvcmF0aW9uLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU3VsdGFuIG9mIFN5bnRoZXNpc1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFkZSB5b3UgdGhlICdTdWx0YW4gb2YgU3ludGhlc2lzLicgWW91J3JlIHRoZSBtYXN0ZXIgd2VhdmVyLCB0aHJlYWRpbmcgdG9nZXRoZXIgdGhyZWFkcyBvZiBpbmZvcm1hdGlvbiBpbnRvIGEgcmljaCB0YXBlc3RyeSBvZiBpbnNpZ2h0LlwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXRlcm5hbCBBcmNoaXZpc3RcIiwgZGVzY3JpcHRpb246IFwiQXQgdGhlIHBpbm5hY2xlIG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYXN0ZXJ5LCB5b3UncmUgbm93IHJldmVyZWQgYXMgdGhlICdFdGVybmFsIEFyY2hpdmlzdC4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMsIGNhcmVmdWxseSBjdXJhdGVkIGFuZCBudXJ0dXJlZCwgc3RhbmQgYXMgaW1tb3J0YWwgYmVhY29ucywgZ3VpZGluZyBzZWVrZXJzIHRocm91Z2ggdGhlIGxhYnlyaW50aCBvZiBrbm93bGVkZ2UgYWNyb3NzIGFnZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAxMDBcIiB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNJbml0W2luZGV4XVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIEV4YW1wbGUgdXNhZ2U6XHJcbiAgLy8gY29uc3QgY3VycmVudExldmVsID0gNDI7IC8vIFJlcGxhY2UgdGhpcyB3aXRoIHRoZSBhY3R1YWwgcGxheWVyJ3MgbGV2ZWxcclxuICAvLyBjb25zdCBiYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoY3VycmVudExldmVsKTtcclxuICAvLyBjb25zb2xlLmxvZyhgQ29uZ3JhdHVsYXRpb25zISBZb3UndmUgcmVhY2hlZCBMZXZlbCAke2N1cnJlbnRMZXZlbH0uIFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApO1xyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuICAgIC8qXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiB9LFxyXG4gICAgICAvLyBBZGQgbW9yZSBiYWRnZXMgaGVyZSBmb3IgbGV2ZWxzIDUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCBhbmQgMTAwXHJcbiAgICAgIC8vIEV4YW1wbGU6XHJcbiAgICAgIC8vIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiIH0sXHJcbiAgICAgIC8vIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgfSxcclxuICAgICAgLy8gLi4uYW5kIHNvIG9uXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgY29uc3QgbWF4TGV2ZWwgPTEwMDsgLy8gQXNzdW1pbmcgZWFjaCBiYWRnZSBpcyBhd2FyZGVkIGV2ZXJ5IDUgbGV2ZWxzXHJcbiAgICBjb25zdCBjYXBwZWRMZXZlbCA9IE1hdGgubWluKGxldmVsLCBtYXhMZXZlbCk7XHJcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoY2FwcGVkTGV2ZWwgLyA1KSAtIDE7XHJcbiAgICByZXR1cm4gYmFkZ2VzW2luZGV4XTtcclxuICB9XHJcbiAgXHJcblxyXG4gIGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIH1cclxuICAqL1xyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBMZXZlbERhdGEge1xyXG4gICAgcG9pbnRzOiBudW1iZXI7XHJcbiAgICBsZXZlbDogbnVtYmVyO1xyXG4gICAgcG9pbnRzTmV4dDogbnVtYmVyO1xyXG4gIH1cclxuICBcclxuICBjb25zdCBsZXZlbERhdGE6IExldmVsRGF0YVtdID0gW1xyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAwLCBwb2ludHNOZXh0OiAwfSxcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMSwgcG9pbnRzTmV4dDogMTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDAsIGxldmVsOiAyLCBwb2ludHNOZXh0OiAzMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMCwgbGV2ZWw6IDMsIHBvaW50c05leHQ6IDc1MDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwLCBsZXZlbDogNCwgcG9pbnRzTmV4dDogMTUwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTAwMCwgbGV2ZWw6IDUsIHBvaW50c05leHQ6IDMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAsIGxldmVsOiA2LCBwb2ludHNOZXh0OiA1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwMDAwLCBsZXZlbDogNywgcG9pbnRzTmV4dDogODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MDAwMCwgbGV2ZWw6IDgsIHBvaW50c05leHQ6IDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMDAwMCwgbGV2ZWw6IDksIHBvaW50c05leHQ6IDE3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3MDAwMCwgbGV2ZWw6IDEwLCBwb2ludHNOZXh0OiAyMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzAwMDAsIGxldmVsOiAxMSwgcG9pbnRzTmV4dDogMzAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwLCBsZXZlbDogMTIsIHBvaW50c05leHQ6IDM4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4MDAwMCwgbGV2ZWw6IDEzLCBwb2ludHNOZXh0OiA0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzAwMDAsIGxldmVsOiAxNCwgcG9pbnRzTmV4dDogNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjAwMDAwLCBsZXZlbDogMTUsIHBvaW50c05leHQ6IDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAwMCwgbGV2ZWw6IDE2LCBwb2ludHNOZXh0OiA5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjAwMDAsIGxldmVsOiAxNywgcG9pbnRzTmV4dDogMTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMTAwMDAsIGxldmVsOiAxOCwgcG9pbnRzTmV4dDogMTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMjAwMDAsIGxldmVsOiAxOSwgcG9pbnRzTmV4dDogMTU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1NTAwMDAsIGxldmVsOiAyMCwgcG9pbnRzTmV4dDogMTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4MDAwMDAsIGxldmVsOiAyMSwgcG9pbnRzTmV4dDogMjA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwNzAwMDAsIGxldmVsOiAyMiwgcG9pbnRzTmV4dDogMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzNjAwMDAsIGxldmVsOiAyMywgcG9pbnRzTmV4dDogMjY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2NzAwMDAsIGxldmVsOiAyNCwgcG9pbnRzTmV4dDogMzAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMDAsIGxldmVsOiAyNSwgcG9pbnRzTmV4dDogMzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNTAwMDAsIGxldmVsOiAyNiwgcG9pbnRzTmV4dDogMzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MjAwMDAsIGxldmVsOiAyNywgcG9pbnRzTmV4dDogNDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMTAwMDAsIGxldmVsOiAyOCwgcG9pbnRzTmV4dDogNDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MjAwMDAsIGxldmVsOiAyOSwgcG9pbnRzTmV4dDogNDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5NTAwMDAsIGxldmVsOiAzMCwgcG9pbnRzTmV4dDogNTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0MDAwMDAsIGxldmVsOiAzMSwgcG9pbnRzTmV4dDogNTg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU4NzAwMDAsIGxldmVsOiAzMiwgcG9pbnRzTmV4dDogNjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYzNjAwMDAsIGxldmVsOiAzMywgcG9pbnRzTmV4dDogNjg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY4NzAwMDAsIGxldmVsOiAzNCwgcG9pbnRzTmV4dDogNzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDAwMDAsIGxldmVsOiAzNSwgcG9pbnRzTmV4dDogNzk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5NTAwMDAsIGxldmVsOiAzNiwgcG9pbnRzTmV4dDogODUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg1MjAwMDAsIGxldmVsOiAzNywgcG9pbnRzTmV4dDogOTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkxMTAwMDAsIGxldmVsOiAzOCwgcG9pbnRzTmV4dDogOTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk3MjAwMDAsIGxldmVsOiAzOSwgcG9pbnRzTmV4dDogMTAzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDM1MDAwMCwgbGV2ZWw6IDQwLCBwb2ludHNOZXh0OiAxMTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMDAwMDAwLCBsZXZlbDogNDEsIHBvaW50c05leHQ6IDExNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTE2NzAwMDAsIGxldmVsOiA0MiwgcG9pbnRzTmV4dDogMTIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjM2MDAwMCwgbGV2ZWw6IDQzLCBwb2ludHNOZXh0OiAxMzA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMDcwMDAwLCBsZXZlbDogNDQsIHBvaW50c05leHQ6IDEzODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTM4MDAwMDAsIGxldmVsOiA0NSwgcG9pbnRzTmV4dDogMTQ1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNDU1MDAwMCwgbGV2ZWw6IDQ2LCBwb2ludHNOZXh0OiAxNTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MzIwMDAwLCBsZXZlbDogNDcsIHBvaW50c05leHQ6IDE2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTYxMTAwMDAsIGxldmVsOiA0OCwgcG9pbnRzTmV4dDogMTY5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjkyMDAwMCwgbGV2ZWw6IDQ5LCBwb2ludHNOZXh0OiAxNzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3NzUwMDAwLCBsZXZlbDogNTAsIHBvaW50c05leHQ6IDE4NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTg2MDAwMDAsIGxldmVsOiA1MSwgcG9pbnRzTmV4dDogMTk0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxOTQ3MDAwMCwgbGV2ZWw6IDUyLCBwb2ludHNOZXh0OiAyMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwMzYwMDAwLCBsZXZlbDogNTMsIHBvaW50c05leHQ6IDIxMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjEyNzAwMDAsIGxldmVsOiA1NCwgcG9pbnRzTmV4dDogMjIyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMjIwMDAwMCwgbGV2ZWw6IDU1LCBwb2ludHNOZXh0OiAyMzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMTUwMDAwLCBsZXZlbDogNTYsIHBvaW50c05leHQ6IDI0MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjQxMjAwMDAsIGxldmVsOiA1NywgcG9pbnRzTmV4dDogMjUxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNTExMDAwMCwgbGV2ZWw6IDU4LCBwb2ludHNOZXh0OiAyNjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2MTIwMDAwLCBsZXZlbDogNTksIHBvaW50c05leHQ6IDI3MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjcxNTAwMDAsIGxldmVsOiA2MCwgcG9pbnRzTmV4dDogMjgyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyODIwMDAwMCwgbGV2ZWw6IDYxLCBwb2ludHNOZXh0OiAyOTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI5MjcwMDAwLCBsZXZlbDogNjIsIHBvaW50c05leHQ6IDMwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAzNjAwMDAsIGxldmVsOiA2MywgcG9pbnRzTmV4dDogMzE0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMTQ3MDAwMCwgbGV2ZWw6IDY0LCBwb2ludHNOZXh0OiAzMjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMyNjAwMDAwLCBsZXZlbDogNjUsIHBvaW50c05leHQ6IDMzNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM3NTAwMDAsIGxldmVsOiA2NiwgcG9pbnRzTmV4dDogMzQ5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNDkyMDAwMCwgbGV2ZWw6IDY3LCBwb2ludHNOZXh0OiAzNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM2MTEwMDAwLCBsZXZlbDogNjgsIHBvaW50c05leHQ6IDM3MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzczMjAwMDAsIGxldmVsOiA2OSwgcG9pbnRzTmV4dDogMzg1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODU1MDAwMCwgbGV2ZWw6IDcwLCBwb2ludHNOZXh0OiAzOTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM5ODAwMDAwLCBsZXZlbDogNzEsIHBvaW50c05leHQ6IDQxMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDEwNzAwMDAsIGxldmVsOiA3MiwgcG9pbnRzTmV4dDogNDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MjM2MDAwMCwgbGV2ZWw6IDczLCBwb2ludHNOZXh0OiA0MzY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQzNjcwMDAwLCBsZXZlbDogNzQsIHBvaW50c05leHQ6IDQ1MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUwMDAwMDAsIGxldmVsOiA3NSwgcG9pbnRzTmV4dDogNDYzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NjM1MDAwMCwgbGV2ZWw6IDc2LCBwb2ludHNOZXh0OiA0NzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3NzIwMDAwLCBsZXZlbDogNzcsIHBvaW50c05leHQ6IDQ5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDkxMTAwMDAsIGxldmVsOiA3OCwgcG9pbnRzTmV4dDogNTA1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDUyMDAwMCwgbGV2ZWw6IDc5LCBwb2ludHNOZXh0OiA1MTk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUxOTUwMDAwLCBsZXZlbDogODAsIHBvaW50c05leHQ6IDUzNDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTM0MDAwMDAsIGxldmVsOiA4MSwgcG9pbnRzTmV4dDogNTQ4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDg3MDAwMCwgbGV2ZWw6IDgyLCBwb2ludHNOZXh0OiA1NjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU2MzYwMDAwLCBsZXZlbDogODMsIHBvaW50c05leHQ6IDU3ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTc4NzAwMDAsIGxldmVsOiA4NCwgcG9pbnRzTmV4dDogNTk0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1OTQwMDAwMCwgbGV2ZWw6IDg1LCBwb2ludHNOZXh0OiA2MDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwOTUwMDAwLCBsZXZlbDogODYsIHBvaW50c05leHQ6IDYyNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjI1MjAwMDAsIGxldmVsOiA4NywgcG9pbnRzTmV4dDogNjQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NDExMDAwMCwgbGV2ZWw6IDg4LCBwb2ludHNOZXh0OiA2NTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY1NzIwMDAwLCBsZXZlbDogODksIHBvaW50c05leHQ6IDY3MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjczNTAwMDAsIGxldmVsOiA5MCwgcG9pbnRzTmV4dDogNjkwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2OTAwMDAwMCwgbGV2ZWw6IDkxLCBwb2ludHNOZXh0OiA3MDY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcwNjcwMDAwLCBsZXZlbDogOTIsIHBvaW50c05leHQ6IDcyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzIzNjAwMDAsIGxldmVsOiA5MywgcG9pbnRzTmV4dDogNzQwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDA3MDAwMCwgbGV2ZWw6IDk0LCBwb2ludHNOZXh0OiA3NTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1ODAwMDAwLCBsZXZlbDogOTUsIHBvaW50c05leHQ6IDc3NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzc1NTAwMDAsIGxldmVsOiA5NiwgcG9pbnRzTmV4dDogNzkzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTMyMDAwMCwgbGV2ZWw6IDk3LCBwb2ludHNOZXh0OiA4MTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgxMTEwMDAwLCBsZXZlbDogOTgsIHBvaW50c05leHQ6IDgyOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODI5MjAwMDAsIGxldmVsOiA5OSwgcG9pbnRzTmV4dDogODQ3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NDc1MDAwMCwgbGV2ZWw6IDEwMCwgcG9pbnRzTmV4dDogODY2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NjYwMDAwMCwgbGV2ZWw6IDEwMSwgcG9pbnRzTmV4dDogODg0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4ODQ3MDAwMCwgbGV2ZWw6IDEwMiwgcG9pbnRzTmV4dDogOTAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MDM2MDAwMCwgbGV2ZWw6IDEwMywgcG9pbnRzTmV4dDogOTIyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjI3MDAwMCwgbGV2ZWw6IDEwNCwgcG9pbnRzTmV4dDogOTQyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NDIwMDAwMCwgbGV2ZWw6IDEwNSwgcG9pbnRzTmV4dDogOTYxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NjE1MDAwMCwgbGV2ZWw6IDEwNiwgcG9pbnRzTmV4dDogOTgxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5ODEyMDAwMCwgbGV2ZWw6IDEwNywgcG9pbnRzTmV4dDogMTAwMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMTEwMDAwLCBsZXZlbDogMTA4LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDIxMjAwMDAsIGxldmVsOiAxMDksIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwNDE1MDAwMCwgbGV2ZWw6IDExMCwgcG9pbnRzTmV4dDogMTA2MTUwMDAwIH0sXHJcbiAgXTtcclxuICBcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzOiBudW1iZXIpOiBMZXZlbERhdGEge1xyXG4gICAgbGV0IGxldmVsIDpMZXZlbERhdGEgPSBsZXZlbERhdGFbMF07XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmIChwb2ludHMgPj0gZGF0YS5wb2ludHMpIHtcclxuICAgICAgICBsZXZlbCA9IGRhdGE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsZXZlbDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBzdGF0dXNQb2ludHNGb3JMZXZlbCh0YXJnZXRMZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBzdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAodGFyZ2V0TGV2ZWwgPT0gZGF0YS5sZXZlbCAmJiBzdGF0dXNQb2ludHMgPT0gMCkge1xyXG4gICAgICAgIHN0YXR1c1BvaW50cyA9IGRhdGEucG9pbnRzO1xyXG4gICAgICB9IFxyXG4gICAgfVxyXG5cclxuXHRcdFxyXG5cdFx0cmV0dXJuIHN0YXR1c1BvaW50c1xyXG4gIH1cclxuICBcclxuXHJcbi8qXHJcbmNvbnN0IHBvaW50cyA9IDU1MDA7XHJcbmNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzKTtcclxuY29uc29sZS5sb2coYFdpdGggJHtwb2ludHN9IHBvaW50cywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgJHtsZXZlbH0uYCk7XHJcbiovIiwgImNvbnN0IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlOiBzdHJpbmdbXSA9IFtcclxuXHRcIlNldmVuIGRheXMgb2Ygbm90ZS10YWtpbmc/IFlvdSdyZSBwcmFjdGljYWxseSBhIG5vdGUgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgZmllc3RhISBcdUQ4M0NcdURGODlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgcGFydHkgZ29pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIFlvdSdyZSBsaWtlIHRoZSBKYW1lcyBCb25kIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURENzZcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2VjcmV0IGFnZW50IVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAnTm90ZS1BLURheScgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2FwZXMgb3B0aW9uYWwhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSd2ZSBwcmFjdGljYWxseSB3cml0dGVuIGEgbWluaSBub3ZlbCBieSBub3chIFx1RDgzRFx1RENEQVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBhdXRob3Igc3RhdHVzIGFjaGlldmVkIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBVc2FpbiBCb2x0IG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc3ByaW50aW5nIHRvd2FyZHMga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNwcmVlISBJdCdzIGxpa2UgYSBub3Rlcy1wbG9zaW9uISBcdUQ4M0RcdURDQTVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgZmlyZXdvcmtzIGNvbWluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGJhc2ljYWxseSB0aGUgTWljaGFlbCBKb3JkYW4gb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDMFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzbGFtIGR1bmshXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTVZQISBcdUQ4M0NcdURGQzZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzY29yaW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlICdTZXZlbiBEYXkgTm90ZSBGZXZlcicgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXRjaCB0aGUgZmV2ZXIhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIHJvY2tzdGFyISBcdUQ4M0NcdURGQjhcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBqYW1taW4nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIG1hZ2ljIHNob3chIE5vdyB5b3Ugc2VlIHRoZSBub3Rlcywgbm93IHlvdSBkb24ndCEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMsIGtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgbGlrZSBhIG5vdGUtdGFraW5nIEplZGkgTWFzdGVyISBcdUQ4M0NcdURGMENcdTI2OTRcdUZFMEYgW1hdIHBvaW50cywgbWF5IHRoZSBub3RlcyBiZSB3aXRoIHlvdSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTWFjR3l2ZXIsIHR1cm5pbmcgaW5mb3JtYXRpb24gaW50byBzb2x1dGlvbnMhIFx1RDgzRFx1REQyN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNyYWZ0aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgY2hlZiwgY29va2luZyB1cCBhIGtub3dsZWRnZSBmZWFzdCEgXHVEODNDXHVERjczXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY29va2luZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0MFx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIExld2lzIGFuZCBDbGFyaywgY2hhcnRpbmcgbmV3IHRlcnJpdG9yaWVzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEREZBXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBkZXRlY3RpdmUsIHNvbHZpbmcgY2FzZXMgb2YgY3VyaW9zaXR5ISBcdUQ4M0RcdURENzVcdUZFMEZcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBkZXRlY3RpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBwaW9uZWVyLCBibGF6aW5nIHRyYWlscyB0aHJvdWdoIHRoZSBmb3Jlc3RzIG9mIGluZm9ybWF0aW9uISBcdUQ4M0NcdURGMzJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwaW9uZWVyaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiXHJcbl07XHJcblxyXG5jb25zdCB0d29Ob3RlTWVzc2FnZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQm9vbSEgWW91IGp1c3QgYWNlZCB0aGUgMi1ub3RlIHRhbmdvISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIGdyb292aW4nIVwiLFxyXG5cdFwiVHdvIG5vdGVzIGluIGEgZGF5PyBZb3UncmUgb2ZmaWNpYWxseSBhIE5vdGUgTmluamEhIFx1RDgzRVx1REQ0QiBbWF0gcG9pbnRzIGVhcm5lZC4gUm9jayBvbiFcIixcclxuXHRcIkhpZ2gtZml2ZSEgWW91J3ZlIGNvbnF1ZXJlZCB0aGUgMi1ub3RlIHJvZGVvISBcdUQ4M0VcdUREMjAgW1hdIHBvaW50cyBlYXJuZWQuIFllZWhhdyFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlISBUd28gbm90ZXMgaW4gb25lIGRheSwgeW91IGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFR3byBub3RlcyBpbiBhIGRheSAtIHdoYXQncyB5b3VyIHNlY3JldCB3ZWFwb24/IFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiS2Fib29tISBZb3UganVzdCBibGV3IHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgd2F0ZXIhIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAyLW5vdGUgc3VwZXJzdGFyISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBpbiB0aGUgYmFnLiBLZWVwIHNoaW5pbmchXCIsXHJcblx0XCJEb3VibGUgdXAsIGRvdWJsZSBkb3duISBUd28gbm90ZXMgaW4gb25lIGRheSAtIHlvdSdyZSBhIHJvY2tzdGFyISBcdUQ4M0NcdURGQjggW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIHBhcnR5ISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIkthLWNoaW5nISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSByYWNraW5nIHVwIHRob3NlIHBvaW50cyEgXHVEODNEXHVEQ0IwIFtYXSBlYXJuZWQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFnaWNpYW4hIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCB0cmljaz9cIixcclxuXHRcIlR3byBub3Rlcz8gTmFpbGVkIGl0ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgZ29pbmchXCIsXHJcblx0XCJBYnJhLWNhZGFicmEhIFR3byBub3RlcyBhcHBlYXIhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSwgZG91YmxlIHRoZSBmdW4hIFR3byBub3RlcyBpbiBvbmUgZGF5ISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIGZpZXN0YSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fwb3chIFR3byBub3RlcyBpbiBhIGRheSAtIHlvdSdyZSBhIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGIFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgYWR2ZW50dXJlP1wiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiXHJcbl07XHJcblxyXG5jb25zdCByYW5kb21Qb2ludE5vdGljZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQmF6aW5nYSEgWW91IGp1c3Qgc25hZ2dlZCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiS2Fib29tISBbWF0gcG9pbnRzIGFyZSBub3cgaW4geW91ciBwb2NrZXQhXCIsXHJcblx0XCJXb29ob28hIFtYXSBwb2ludHMgZWFybmVkISBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiUG9pbnRzIGFob3khIFtYXSBtb3JlIGluIHRoZSBiYW5rIVwiLFxyXG5cdFwiU2NvcmUhIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciB0b3RhbCFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJaaXBwaXR5LXphcCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQ2hhbXBpb24gbW92ZSEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJCaW5nbyEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJTaGF6YW0hIFtYXSBwb2ludHMgdG8gdGhlIHJlc2N1ZSFcIixcclxuXHRcIkthLWNoaW5nISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlN1cGVyYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJCcmF2byEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiV2VsbCBkb25lISBbWF0gbW9yZSBwb2ludHMgaW4gdG93IVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzLCBqdXN0IGxpa2UgdGhhdCFcIixcclxuXHRcIkEgcm91bmQgb2YgYXBwbGF1c2UgZm9yIFtYXSBwb2ludHMhXCIsXHJcblx0XCJXaG9vc2ghIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiV29vISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiR3JlYXQgam9iISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkZhbnRhc3RpYyEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiSG9vcmF5ISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIk5pY2Ugb25lISBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQhXCIsXHJcblx0XCJXb290IHdvb3QhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJhbSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiQ29vbCBiZWFucyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJTcGxlbmRpZCEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTWFydmVsb3VzISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphbnkhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkV4cXVpc2l0ZSEgW1hdIHBvaW50cyBpbiB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiT3V0c3RhbmRpbmchIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIGpvYiFcIixcclxuXHRcIk1hZ25pZmljZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiVGVycmlmaWMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlN1cGVyYiEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIkV4Y2VsbGVudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiQXdlc29tZSEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiV2VsbCBwbGF5ZWQhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJJbXByZXNzaXZlISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQnJpbGxpYW50ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJOaWNlIG1vdmUhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlN0ZWxsYXIhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiV2VsbCBkZXNlcnZlZCEgW1hdIHBvaW50cyBlYXJuZWQhXCJcclxuXTtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZS5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZVtyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdHdvTm90ZU1lc3NhZ2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHR3b05vdGVNZXNzYWdlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyhwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiByYW5kb21Qb2ludE5vdGljZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gcmFuZG9tUG9pbnROb3RpY2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuLy8gRXhhbXBsZSB1c2FnZVxyXG4vLyBjb25zdCByYW5kb21Qb2ludHMgPSAxMDA7IC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjdHVhbCBwb2ludHMgdmFsdWVcclxuLy8gY29uc3QgcmFuZG9tTWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocmFuZG9tUG9pbnRzKTtcclxuLy8gY29uc29sZS5sb2cocmFuZG9tTWVzc2FnZSk7XHJcblxyXG5cclxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQSxtQkFBcUU7OztBQ0FyRSxzQkFB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LEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLElBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsS0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3RELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUN6RDtBQUVPLFNBQVMsa0JBQWtCLFFBQTJCO0FBQzNELE1BQUksUUFBbUIsVUFBVSxDQUFDO0FBQ2xDLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksVUFBVSxLQUFLLFFBQVE7QUFDekIsY0FBUTtBQUFBLElBQ1YsT0FBTztBQUNMO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLHFCQUFxQixhQUE2QjtBQUNoRSxNQUFJLGVBQWU7QUFDbkIsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxlQUFlLEtBQUssU0FBUyxnQkFBZ0IsR0FBRztBQUNsRCxxQkFBZSxLQUFLO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBR0YsU0FBTztBQUNQOzs7QUM5SUYsSUFBTSwwQkFBb0M7QUFBQSxFQUN6QztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0sa0JBQTRCO0FBQUEsRUFDakM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxF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O0FBQzlDO0FBQUEsRUFDRDtBQUVBLFFBQU0sU0FBUyxXQUFXO0FBQzFCLFFBQU0sZUFBZSxPQUFPLGFBQWE7QUFFekMsTUFBSSxDQUFDLGNBQWM7QUFDbEIsWUFBUSxNQUFNLHNFQUFzRTtBQUNwRjtBQUFBLEVBQ0Q7QUFFQSxNQUFJLGVBQWUsYUFBYSxXQUFXLFFBQVEsa0JBQU07QUFDekQsaUJBQWUsYUFBYSxXQUFXLFFBQVEsMEJBQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLDRCQUFRLE1BQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLG9CQUFRLE1BQU07QUFFckQsU0FBTyxpQkFBaUIsWUFBWTtBQUNyQztBQUVBLFNBQVMsNkJBQTZCLGVBQXVCLFdBQTJCO0FBQ3ZGLE1BQUk7QUFDSixNQUFJLFNBQVMsZUFBZSxFQUFFLElBQUksV0FBVTtBQUMzQyxtQkFBZSxZQUFZLFNBQVMsZUFBZSxFQUFFO0FBQUEsRUFDdEQsT0FBTztBQUNOLG1CQUFlO0FBQUEsRUFDaEI7QUFFQSxTQUFPO0FBQ1I7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAib2JqIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgIk1JTExJU0VDT05EU19JTl9XRUVLIiwgImZvcm1hdHRlcnMiLCAibG9jYWxpemUiLCAieSIsICJNIiwgImQiLCAiYSIsICJoIiwgIkgiLCAibSIsICJzIiwgIlMiLCAiZGF0ZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0TG9uZyIsICJ0aW1lTG9uZ0Zvcm1hdHRlciIsICJkYXRlVGltZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0IiwgImZvcm1hdERpc3RhbmNlIiwgImZvcm1hdCIsICJmb3JtYXRSZWxhdGl2ZSIsICJvcmRpbmFsTnVtYmVyIiwgInZhbHVlQ2FsbGJhY2siLCAiZGVmYXVsdE9wdGlvbnMiLCAibG9jYWxlIiwgIm1hdGNoIiwgInBhdGgiLCAiYXBwIiwgImZpbGVOYW1lIiwgImN1cnJlbnRDb3VudCIsICJpIiwgImkiLCAiZSIsICJpIiwgIm1hdGNoIiwgImZpbGUiLCAiYXBwIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgY3JlYXRlZC5gKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpO1xyXG5cdFx0fSBlbHNlIGlmIChpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0Ly8gZG8gbm90aGluZ1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgbm90ZSBjcmVhdGlvbiB3YXMgcmF0ZWQgYWxyZWFkeSB0b2RheS5gKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IDE7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpIHtcclxuXHRcdGxldCBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzID0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0aWYgKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPCA3KSB7XHJcblx0XHRcdGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMrKztcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXM7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblxyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24oY3VycmVudFdlZWtseUNyZWF0ZWROb3Rlcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24obmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyKSB7XHJcblx0XHRpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA8PSA2KSB7XHJcblx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9IGVsc2UgaWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPT0gNykge1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSk7XHJcblx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB1cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyOiBIVE1MU3BhbkVsZW1lbnQpe1xyXG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHModGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpXHJcblx0XHRjb25zdCBwcm9ncmVzc2JhclBlcmNlbnQgPSAodGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMFxyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9YClcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyOiBudW1iZXIsIGJhckxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRsZXQgcHJvZ3Jlc3NiYXIgPSAnJ1xyXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gY2hhck51bVByb2dyZXNzYmFyOyBpKyspIHtcclxuXHRcdFx0aWYgKGkgPD0gYmFyTGVuZ3RoKSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJz0nXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJy0nXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9ncmVzc2JhcjtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZFNldHRpbmdzKCknKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0bGV0IHN0cmVha2Jvb3N0ZXIgPSB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXI7XHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3IgPSB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyKSArIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VTdHJlYWtib29zdGVyKGluY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArPSBpbmNyZWFzZVZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZGVjcmVhc2VTdHJlYWtib29zdGVyKGRlY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdGxldCBuZXdWYWx1ZSA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtPSBkZWNyZWFzZVZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmxldmVsQW5kUG9pbnRzXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeZGFpbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UzID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UzID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIHJlYWQgY3VycmVudCBQb2ludHMgZnJvbSBzZXR0aW5nc1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzID0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHJcblx0XHRjb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKG5ld1BvaW50cyk7XHJcblx0XHRsZXQgbmV4dExldmVsQXQgPSB0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsO1xyXG5cdFx0bGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA8IGxldmVsLmxldmVsKXtcclxuXHRcdFx0Ly8gTGV2ZWwgVXAgYXJjaGl2ZWRcclxuXHRcdFx0bmV3IE5vdGljZShgV2l0aCAke25ld1BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsLmxldmVsfS5gKVxyXG5cdFx0XHQvLyBjaGVjayBmaXJzdCBpZiB0aGlzIG1lYW5zIGEgbmV3IGJhZGdlIGJlZm9yZSBpdCBnZXRzIG92ZXJ3cml0dGVuXHJcblx0XHRcdHJlY2VpdmVCYWRnZSA9IGNoZWNrSWZSZWNlaXZlQUJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGxldmVsLmxldmVsKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsID0gbGV2ZWwubGV2ZWw7XHJcblx0XHRcdG5leHRMZXZlbEF0ID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwcm9ncmVzc0JhckVuZCA9IG5leHRMZXZlbEF0IC0gbmV3UG9pbnRzO1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzU3RyaW5nID0gJ3wgKipMZXZlbCoqICB8ICoqJyArIGxldmVsLmxldmVsICsgJyoqIHxcXG58IFBvaW50cyB8ICcgKyBuZXdQb2ludHMgKyAnICAgIHxcXG5ebGV2ZWxBbmRQb2ludHNcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW0V4cHJpcmllbmNlXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXFxuICAgIGRhdGE6IFsnICsgbmV3UG9pbnRzICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgcHJvZ3Jlc3NCYXJFbmQgKyAnXVxcbnhNaW46ICcgKyBsZXZlbC5wb2ludHMgKyAnXFxueE1heDogJyArIGxldmVsLnBvaW50c05leHQgKyAnXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJ1xyXG5cdFx0Y29uc3QgZGFpbHlDaGFsbGVuZ2UgPSAnfCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKionICsgdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgKyAnLzIqKiAgIHwnO1xyXG5cdFx0Y29uc3QgZGF5c0xlZnRJbldlZWtseUNoYWluIDogbnVtYmVyID0gNyAtIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGNvbnN0IHdlZWtseUNoYWxsZW5nZSA9ICd8ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsKXtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAyO1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyNDtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQzID0gcmVmZXJlbmNlMyArIDI0IC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZWNlaXZlQmFkZ2VcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBnaXZlQmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IGJhZGdlLmxldmVsICsgXCI6ICpcIiArIGJhZGdlLm5hbWUgKyBcIipcIil7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDE7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyICsgMjtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqIFwiICsgYmFkZ2UubGV2ZWwgKyBcIlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXVxyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMi5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlSW5pdEJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKipcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgcmVtb3ZlQmFkZ2VzV2hlbkluaXRMZXZlbEhpZ2hlcihhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBsZXZlbDogbnVtYmVyKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgb3V0c3RhbmRpbmdcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyID09IG51bGwpe1xyXG5cdFx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cclxuXHRcdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGxldmVsKSB7XHJcblx0XHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgcmVmZXJlbmNlICsgMSksIC4uLmxpbmVzLnNsaWNlKHJlZmVyZW5jZTIpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBjcmVhdGVDaGFydCh2YXVsdDogVmF1bHQpOiBQcm9taXNlPHN0cmluZz57XHJcblx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RmlsZSA9IGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlcylcclxuXHRcdC8vbGV0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lXHJcblx0XHQvL2lmIChlYXJsaWVzdEZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lICl7XHJcblx0XHRjb25zdCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5tdGltZVxyXG5cdFx0Ly99XHJcblxyXG5cdFx0bGV0IG1vbnRoQ291bnRlciA9IDAgLy9mb3JtYXQobmV3IERhdGUoZWFybGllc3REYXRlKSwgJ01NJyk7XHJcblx0XHRsZXQgZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHQvL2NvbnN0IGZpbGVEYXRlTW9udGhNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgZmlsZURhdGVNb250aE1hcE1vZCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBtb250aGNvdW50ID0gbW9udGhzQmV0d2VlbihuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCBuZXcgRGF0ZSgpKVxyXG5cdFx0bGV0IGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0bGV0IHlMYWJlbCA9IFwiXCJcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBjcmVhdGVkXHJcblx0XHQvKndoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH0qL1xyXG5cclxuXHRcdG1vbnRoQ291bnRlciA9IDBcclxuXHRcdGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgbW9kaWZpZWRcclxuXHRcdHdoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHR5TGFiZWwgPSB5TGFiZWwgKyBkYXRlU3RyaW5nICsgXCIsIFwiXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fVxyXG5cdFx0eUxhYmVsID0geUxhYmVsLnNsaWNlKDAseUxhYmVsLmxlbmd0aC0yKVxyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdC8qY29uc3QgY3JlYXRpb25EYXRlcyA9IGdldENyZWF0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNyZWF0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fSovXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgbW9kIGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdGNvbnN0IG1vZGlmaWNhdGlvbkRhdGVzID0gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgY3JlYXRlZFxyXG5cdFx0LypsZXQgY2hhclN0cmluZ0NyZWF0ZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcCkge1xyXG5cdFx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQuc2xpY2UoMCxjaGFyU3RyaW5nQ3JlYXRlZC5sZW5ndGgtMikqL1xyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBtb2RpZmllZFxyXG5cdFx0bGV0IGNoYXJTdHJpbmdNb2RpZmllZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwTW9kKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGtleTogJHtrZXl9LCB2YWx1ZTogJHt2YWx1ZX1gKTtcclxuXHRcdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZC5zbGljZSgwLGNoYXJTdHJpbmdNb2RpZmllZC5sZW5ndGgtMilcclxuXHJcblx0XHRyZXR1cm4gY3JlYXRlQ2hhcnRGb3JtYXQoeUxhYmVsLCBjaGFyU3RyaW5nTW9kaWZpZWQsIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbDogUHJvbWlzZTxib29sZWFuPil7XHJcblx0XHRuZXdMZXZlbC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pPT4ge1xyXG5cdFx0XHRpZihyZXN1bHQpe1xyXG5cdFx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGZhbHNlKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhgYmFkZ2UgZm9yIGxldmVsICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gaXMgJHtiYWRnZS5uYW1lfSAtICR7YmFkZ2UubGV2ZWx9YClcclxuXHRcdFx0XHR0aGlzLmdpdmVCYWRnZUluUHJvZmlsZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBiYWRnZSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0XHRcdHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVtb3ZlS2V5c0Zyb21Gcm9udG1hdHRlcigpIHtcclxuXHRcdC8vY29uc3QgeyBWYXVsdCwgVEZpbGUgfSA9IHdpbmRvdy5hcHA7XHJcblx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcFxyXG5cdFx0Ly9jb25zdCB2YXVsdCA9IFZhdWx0LnJlb3BlbigpO1xyXG5cclxuXHRcdC8vIEdldCBhbGwgTWFya2Rvd24gZmlsZXMgaW4gdGhlIHZhdWx0XHJcblx0XHQvL2NvbnN0IG1hcmtkb3duRmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXAgPSBhd2FpdCBnZXRGaWxlQ291bnRNYXAodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MudGFnc0V4Y2x1ZGUsIHRoaXMuc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSk7XHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcC5rZXlzKCkpIHtcclxuXHRcdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRGaWxlcygpO1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZXMuZmluZChmaWxlID0+IGZpbGUuYmFzZW5hbWUgPT09IGZpbGVOYW1lKTtcclxuXHRcdFx0aWYgKCFmaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGBGaWxlICR7ZmlsZU5hbWV9IG5vdCBmb3VuZC5gKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL2NvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWV9YCk7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIG5ldyBOb3RpY2UoYFJlbW92ZWQgc3BlY2lmaWVkIGtleXMgZnJvbSBmcm9udG1hdHRlciBmcm9tIGZpbGUgXFxcIiR7ZmlsZU5hbWV9XFxcIi5gKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHdoaWNoTGV2ZWxOZXh0QmFkZ2UoY3VycmVudExldmVsOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj57XHJcblx0XHRsZXQgbmV4dEJhZGdlTGV2ZWwgPSAwXHJcblx0XHRmb3IgKGxldCBpID0gY3VycmVudExldmVsOyBpIDwgMTEwOyBpKyspe1xyXG5cdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChpLCB0cnVlKVxyXG5cdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdGNvbnN0IG1hdGNoID0gYmFkZ2UubGV2ZWwubWF0Y2gobGV2ZWxSZWdleCk7XHJcblx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBjdXJyZW50TGV2ZWwgJiYgbmV4dEJhZGdlTGV2ZWwgPT0gMCApIHtcclxuXHRcdFx0XHRcdG5leHRCYWRnZUxldmVsID0gbGV2ZWxOdW1iZXI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV4dEJhZGdlTGV2ZWxcclxuXHR9XHJcblxyXG5cdGFzeW5jIGJvb3N0ZXJGb3JJbml0KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcblx0XHRjb25zdCBuZXh0QmFkZ2VBdCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0Y29uc3Qgc3RhdHVzUG9pbnRzVG9SZWFjaCA9IHN0YXR1c1BvaW50c0ZvckxldmVsKG5leHRCYWRnZUF0KVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgc3RhdHVzUG9pbnRzVG9SZWFjaCBmb3IgbmV4dCBCYWRnZTogJHtzdGF0dXNQb2ludHNUb1JlYWNofWApXHJcblx0XHQvLyA1MCBOb3RlcyBmcm9tIExldmVsIDEgdG8gNSB0byBnZXQgdGhlIGZpcnN0IGJhZGdlLlxyXG5cdFx0Ly8gMzAwIFBvaW50cyBpbiBhdmVyYWdlIGZvciBhIE5vdGUuXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gTWF0aC5yb3VuZCgoc3RhdHVzUG9pbnRzVG9SZWFjaCAtIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKS81MC8zMDApO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSBib29zdGVyRmFjdG9yXHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gdHJ1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgYm9vc3RlckZha3RvcjogJHtib29zdGVyRmFjdG9yfWApXHJcblx0XHRyZXR1cm4gYm9vc3RlckZhY3RvclxyXG5cdH1cclxuXHJcblx0YXN5bmMgb3BlbkF2YXRhckZpbGUoKSB7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlKXtcclxuXHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk/LnBhdGggfHwgJyc7XHJcblx0XHRcdGF3YWl0IGFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGV4aXN0aW5nRmlsZS5wYXRoLCBzb3VyY2VQYXRoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwiRmlsZSBub3QgZm91bmQgb3IgdW5hYmxlIHRvIG9wZW4uXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpc1NhbWVEYXkoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBjdXJyZW50RGF0ZSA9IHdpbmRvdy5tb21lbnQoKTsgLy8gR2V0IHRoZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gY3VycmVudERhdGUuaXNTYW1lKGlucHV0RGF0ZSwgJ2RheScpOyAvLyBDaGVjayBpZiB0aGV5IGFyZSB0aGUgc2FtZSBkYXlcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPbmVEYXlCZWZvcmUoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBvbmVEYXlCZWZvcmVDdXJyZW50ID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKTsgLy8gQ2FsY3VsYXRlIG9uZSBkYXkgYmVmb3JlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBpbnB1dERhdGUuaXNTYW1lKG9uZURheUJlZm9yZUN1cnJlbnQsICdkYXknKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXZhdGFyRmlsZShhcHA6IEFwcCwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG5cdC8vc2V0dGluZ3M6IEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzO1xyXG5cdC8vIERlZmluZSB0aGUgZmlsZSBuYW1lIGFuZCBjb250ZW50XHJcblx0Ly9jb25zdCBmaWxlTmFtZSA9ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nOyAvLyB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lO1xyXG5cdC8vY29uc29sZS5sb2coYGZpbGVOYW1lOiAke2ZpbGVOYW1lfWApXHJcblxyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7ZmlsZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2ZpbGVOYW1lfS5tZCBhbHJlYWR5IGV4aXN0c2ApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHQvLyBDcmVhdGUgdGhlIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHZhdWx0XHJcblx0YXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShgJHtmaWxlTmFtZX0ubWRgLCBhdmF0YXJJbml0Q29udGVudCk7XHJcblxyXG59XHJcblxyXG5cclxuY2xhc3MgTW9kYWxJbmZvcm1hdGlvbmJveCBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmc7IC8vIFN0b3JlIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZGlzcGxheVRleHQ6IHN0cmluZykge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dDsgLy8gU3RvcmUgdGhlIHBhc3NlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5zZXRUZXh0KHRoaXMuZGlzcGxheVRleHQpOyAvLyBVc2UgdGhlIHN0b3JlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlRm9ybWF0U3RyaW5ncyhsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpIHtcclxuXHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHJcblx0aWYgKCFhY3RpdmVWaWV3KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gYWN0aXZlIE1hcmtkb3duIHZpZXcgZm91bmQuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgZWRpdG9yID0gYWN0aXZlVmlldy5lZGl0b3I7XHJcblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cclxuXHRpZiAoIXNlbGVjdGVkVGV4dCkge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIHRleHQgc2VsZWN0ZWQgKGZvciBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIHN3aXRjaCBMYXllciAyICYgMykuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0bGV0IHJlcGxhY2VkVGV4dCA9IHNlbGVjdGVkVGV4dC5yZXBsYWNlQWxsKGxheWVyMiwgXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIik7XHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIzLCBcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIsIGxheWVyMilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiLCBsYXllcjMpXHJcblxyXG5cdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHJlcGxhY2VkVGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IG51bWJlciB7XHJcblx0bGV0IHJhdGluZ0Zha3RvcjogbnVtYmVyXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSByYXRpbmdOZXcgLSBwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMClcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gMFxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ0Zha3RvclxyXG59XHJcblxyXG5cclxuXHJcbiAgXHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4iLCAiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IGdhbWlmaWNhdGlvbiBmcm9tICcuL21haW4nO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBQYXJ0aWFsPElTZXR0aW5ncz4gPSB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiB0cnVlLFxuICBiaW5kRW50ZXI6IHRydWUsXG4gIGJpbmRUYWI6IHRydWUsXG4gIGF2YXRhclBhZ2VOYW1lOiAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJyxcbiAgdGFnc0V4Y2x1ZGU6ICcnLFxuICBmb2xkZXJFeGNsdWRlOiAnRXhjYWxpZHJhdycsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiAnPT0nLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogJyoqJyxcbiAgbnVtQWxsRmlsZXM6IDEsXG4gIG51bUFsbEZpbGVzQ291bnQ6IDAsXG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IDAsXG4gIHN0YXR1c1BvaW50czogMCxcbiAgc3RhdHVzTGV2ZWw6IDEsXG4gIHhwRm9yTmV4dExldmVsOiAxMDAwLFxuICBnYW1pZmljYXRpb25TdGFydERhdGU6ICcxMi4wOC4yMDIzJyxcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGZhbHNlLFxuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IDEsXG4gIGRlYnVnOiBmYWxzZSxcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICBzdHJlYWtib29zdGVyOiAwLFxuICBzdHJlYWtib29zdGVyQWxpdmU6IGZhbHNlLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2V0dGluZ3Mge1xuICBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgYmluZEVudGVyOiBib29sZWFuO1xuICBiaW5kVGFiOiBib29sZWFuO1xuICBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgc3RyZWFrYm9vc3RlckFsaXZlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJBbGl2ZTogYm9vbGVhbjtcblxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBnYW1pZmljYXRpb24pIHtcblx0ICBzdXBlcihhcHAsIHBsdWdpbik7XG5cdCAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cbiAgXG5cdHB1YmxpYyBkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Y29udGFpbmVyRWwuYWRkQ2xhc3MoXCJleGNhbGlkcmF3LXNldHRpbmdzXCIpO1xuXHRcdHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcblxuXHRcdGNvbnN0IGNvZmZlZURpdiA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdihcImNvZmZlZVwiKTtcblx0XHRjb2ZmZWVEaXYuYWRkQ2xhc3MoXCJleC1jb2ZmZWUtZGl2XCIpO1xuXHRcdGNvbnN0IGNvZmZlZUxpbmsgPSBjb2ZmZWVEaXYuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRocmVmOiBcImh0dHBzOi8va28tZmkuY29tL2FuZHJlYXN0cmViaW5nXCIsXG5cdFx0fSk7XG5cdFx0Y29uc3QgY29mZmVlSW1nID0gY29mZmVlTGluay5jcmVhdGVFbChcImltZ1wiLCB7XG5cdFx0YXR0cjoge1xuXHRcdFx0c3JjOiBcImh0dHBzOi8vY2RuLmtvLWZpLmNvbS9jZG4va29maTMucG5nP3Y9M1wiLFxuXHRcdH0sXG5cdFx0fSk7XG5cdFx0Y29mZmVlSW1nLmhlaWdodCA9IDQ1O1xuXG5cdFx0Ly9jb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXHRcdC8vY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgXG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnR2FtaWZ5IHlvdXIgUEtNIC0gU2V0dGluZ3MnIH0pO1xuXHRcdGNvbnNvbGUubG9nKCdzZXR0aW5ncyBjYWxsZWQnKVxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJyN0YWdzIHRvIGlnbm9yZScpXG5cdFx0XHQuc2V0RGVzYygnZW50ZXIgdGFncyB3aXRob3V0ICMgYW5kIHNlcGFyYXRlIHdpdGggXCIsIFwiLlxcbkluY2x1ZGUgbmVzdGVkIHRhZ3MuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgdGFnMSwgdGFnMi9zdWJ0YWcsIFx1MjAyNicpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdFx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdmb2xkZXIgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciBmb2xkZXIgd2hpY2hzIGNvbnRlbnQgc2hhbGwgYmUgaWdub3JlZC4gU2VwYXJhdGUgd2l0aCBcIiwgXCIuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgZm9sZGVyMSwgZm9sZGVyMiwgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9maWxlIFBhZ2UgTmFtZScpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2UgaGVyZSB0aGUgbmFtZSBvZiB5b3VyIHByb2ZpbGUgcGFnZSBpZiB5b3UgbGlrZS4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCduYW1lJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cdFx0XHRcdFxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ090aGVyIFNldHRpbmdzJyB9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdEaXNhYmxlIEluaXQgQ29tbWFuZCcpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiByZW1vdmUgdGhlIGluaXQgY29tbWFuZCBmcm9tIGNvbW1hbmQgcHJvbXB0IGJ5IHN3aXRjaGluZyBvZmYuXFxucmVzdGFydCBuZWVkZWQuJylcblx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4gXG5cdFx0XHRcdHRvZ2dsZVxuICAgICAgICAgIFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpXG4gICAgICAgIFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kID0gdmFsdWU7XG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgXHRcdFx0fSksXG5cdFx0XHQpO1xuXG5cdFx0XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnbGltaXQgdGhlIHZpc2libGUgbW9udGggaW4gdGhlIGNoYXJ0IG9uIHlvdXIgYXZhdGFyIHBhZ2U6ICcgKyB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdC5zZXREZXNjKCdpZiAwLCBhbGwgbW9udGggd2lsbCBiZSBzaG93bi4gRW50ZXIgYSBudW1iZXIgaG93IG1hbnkgbW9udGggc2hhbGwgYmUgc2hvd24uJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTnVtYmVyIG9mIE1vbnRoIHRvIHNob3cnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlLnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cbiAgXG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9ncmVzc2l2ZSBTdW1tYXJpemF0aW9uJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSB3aGljaCBmb3JtYXR0aW5nIHlvdSB1c2UgZm9yIExheWVyIDIgYW5kIDMuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMiBpcyB1c3VhbGx5ICoqJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSlcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMyBpcyB1c3VhbGx5ID09Jylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0fSkpO1xuXG5cdH1cbiAgfSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1aXJlZEFyZ3MocmVxdWlyZWQsIGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgcmVxdWlyZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHJlcXVpcmVkICsgJyBhcmd1bWVudCcgKyAocmVxdWlyZWQgPiAxID8gJ3MnIDogJycpICsgJyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3MubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgZGF0ZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZShOYU4pKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBzb21lIHZhbHVlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKCcyMDE0LTAyLTMxJylcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIG9iamVjdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSh7fSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTtcblxuICAvLyBDbG9uZSB0aGUgZGF0ZVxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YoYXJndW1lbnQpID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjc3RyaW5nLWFyZ3VtZW50c1wiKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufSIsICJpbXBvcnQgaXNEYXRlIGZyb20gXCIuLi9pc0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNWYWxpZFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB2YWxpZD9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgZmFsc2UgaWYgYXJndW1lbnQgaXMgSW52YWxpZCBEYXRlIGFuZCB0cnVlIG90aGVyd2lzZS5cbiAqIEFyZ3VtZW50IGlzIGNvbnZlcnRlZCB0byBEYXRlIHVzaW5nIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBJbnZhbGlkIERhdGUgaXMgYSBEYXRlLCB3aG9zZSB0aW1lIHZhbHVlIGlzIE5hTi5cbiAqXG4gKiBUaW1lIHZhbHVlIG9mIERhdGU6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuOS4xLjFcbiAqXG4gKiBAcGFyYW0geyp9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlIGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgyMDE0LCAxLCAzMSkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWx1ZSwgY29udmVydGFibGUgaW50byBhIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKDEzOTM4MDQ4MDAwMDApXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKCcnKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNWYWxpZChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIGlmICghaXNEYXRlKGRpcnR5RGF0ZSkgJiYgdHlwZW9mIGRpcnR5RGF0ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgcmV0dXJuICFpc05hTihOdW1iZXIoZGF0ZSkpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufSIsICJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdGltZXN0YW1wID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59IiwgImltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSBcIi4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9EQVkgPSA4NjQwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0RheU9mWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZZZWFyVGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIHZhciBkaWZmZXJlbmNlID0gdGltZXN0YW1wIC0gc3RhcnRPZlllYXJUaW1lc3RhbXA7XG4gIHJldHVybiBNYXRoLmZsb29yKGRpZmZlcmVuY2UgLyBNSUxMSVNFQ09ORFNfSU5fREFZKSArIDE7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSAxO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgeWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSk7XG4gIHZhciBmb3VydGhPZkphbnVhcnkgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5KTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENJU09XZWVrKGRhdGUpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkYXRlKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgInZhciBkZWZhdWx0T3B0aW9ucyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykge1xuICBkZWZhdWx0T3B0aW9ucyA9IG5ld09wdGlvbnM7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8ud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZmlyc3RXZWVrT2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWtPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mVGhpc1llYXIsIG9wdGlvbnMpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuICB2YXIgeWVhciA9IGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWsgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vlay5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWssIG9wdGlvbnMpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ1dlZWsoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlciwgdGFyZ2V0TGVuZ3RoKSB7XG4gIHZhciBzaWduID0gbnVtYmVyIDwgMCA/ICctJyA6ICcnO1xuICB2YXIgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpO1xuICB3aGlsZSAob3V0cHV0Lmxlbmd0aCA8IHRhcmdldExlbmd0aCkge1xuICAgIG91dHB1dCA9ICcwJyArIG91dHB1dDtcbiAgfVxuICByZXR1cm4gc2lnbiArIG91dHB1dDtcbn0iLCAiaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqL1xudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuXG4gICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09ICd5eScgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbikge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICByZXR1cm4gdG9rZW4gPT09ICdNJyA/IFN0cmluZyhtb250aCArIDEpIDogYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENEYXRlKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRVVENIb3VycygpIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlWzBdO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSAnYW0nID8gJ2EubS4nIDogJ3AubS4nO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDTWludXRlcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgIHZhciBmcmFjdGlvbmFsU2Vjb25kcyA9IE1hdGguZmxvb3IobWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMykpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZnJhY3Rpb25hbFNlY29uZHMsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJpbXBvcnQgZ2V0VVRDRGF5T2ZZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0RheU9mWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuaW1wb3J0IGxpZ2h0Rm9ybWF0dGVycyBmcm9tIFwiLi4vbGlnaHRGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG52YXIgZGF5UGVyaW9kRW51bSA9IHtcbiAgYW06ICdhbScsXG4gIHBtOiAncG0nLFxuICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgbm9vbjogJ25vb24nLFxuICBtb3JuaW5nOiAnbW9ybmluZycsXG4gIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgbmlnaHQ6ICduaWdodCdcbn07XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCBNaWxsaXNlY29uZHMgaW4gZGF5ICAgICAgICAgICAgfFxuICogfCAgYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgfCAgQiAgfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgfFxuICogfCAgYyAgfCBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlayAgfCAgQyogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZSAgfCBMb2NhbCBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgfCAgRSAgfCBEYXkgb2Ygd2VlayAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRiogfCBEYXkgb2Ygd2VlayBpbiBtb250aCAgICAgICAgICAgfFxuICogfCAgZyogfCBNb2RpZmllZCBKdWxpYW4gZGF5ICAgICAgICAgICAgfCAgRyAgfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaSEgfCBJU08gZGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgfCAgSSEgfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgfFxuICogfCAgaiogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfCAgSiogfCBMb2NhbGl6ZWQgaG91ciB3L28gZGF5IHBlcmlvZCAgfFxuICogfCAgayAgfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgfCAgSyAgfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbCogfCAoZGVwcmVjYXRlZCkgICAgICAgICAgICAgICAgICAgfCAgTCAgfCBTdGFuZC1hbG9uZSBtb250aCAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbyEgfCBPcmRpbmFsIG51bWJlciBtb2RpZmllciAgICAgICAgfCAgTyAgfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgfFxuICogfCAgcCEgfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgfCAgUCEgfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgfFxuICogfCAgcSAgfCBTdGFuZC1hbG9uZSBxdWFydGVyICAgICAgICAgICAgfCAgUSAgfCBRdWFydGVyICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgciogfCBSZWxhdGVkIEdyZWdvcmlhbiB5ZWFyICAgICAgICAgfCAgUiEgfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgdCEgfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgfCAgVCEgfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgfFxuICogfCAgdSAgfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgfCAgVSogfCBDeWNsaWMgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgdiogfCBUaW1lem9uZSAoZ2VuZXJpYyBub24tbG9jYXQuKSAgfCAgViogfCBUaW1lem9uZSAobG9jYXRpb24pICAgICAgICAgICAgfFxuICogfCAgdyAgfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgfCAgVyogfCBXZWVrIG9mIG1vbnRoICAgICAgICAgICAgICAgICAgfFxuICogfCAgeCAgfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgfCAgWCAgfCBUaW1lem9uZSAoSVNPLTg2MDEpICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgfFxuICogfCAgeiAgfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgfCAgWiogfCBUaW1lem9uZSAoYWxpYXNlcykgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAhIGFyZSBub24tc3RhbmRhcmQsIGJ1dCBpbXBsZW1lbnRlZCBieSBkYXRlLWZuczpcbiAqIC0gYG9gIG1vZGlmaWVzIHRoZSBwcmV2aW91cyB0b2tlbiB0byB0dXJuIGl0IGludG8gYW4gb3JkaW5hbCAoc2VlIGBmb3JtYXRgIGRvY3MpXG4gKiAtIGBpYCBpcyBJU08gZGF5IG9mIHdlZWsuIEZvciBgaWAgYW5kIGBpaWAgaXMgcmV0dXJucyBudW1lcmljIElTTyB3ZWVrIGRheXMsXG4gKiAgIGkuZS4gNyBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAqIC0gYElgIGlzIElTTyB3ZWVrIG9mIHllYXIsIGFzIG9wcG9zZWQgdG8gYHdgIHdoaWNoIGlzIGxvY2FsIHdlZWsgb2YgeWVhci5cbiAqIC0gYFJgIGlzIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLCBhcyBvcHBvc2VkIHRvIGBZYCB3aGljaCBpcyBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogICBgUmAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJYCBhbmQgYGlgXG4gKiAgIGZvciB1bml2ZXJzYWwgSVNPIHdlZWstbnVtYmVyaW5nIGRhdGUsIHdoZXJlYXNcbiAqICAgYFlgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgd2AgYW5kIGBlYFxuICogICBmb3Igd2Vlay1udW1iZXJpbmcgZGF0ZSBzcGVjaWZpYyB0byB0aGUgbG9jYWxlLlxuICogLSBgUGAgaXMgbG9uZyBsb2NhbGl6ZWQgZGF0ZSBmb3JtYXRcbiAqIC0gYHBgIGlzIGxvbmcgbG9jYWxpemVkIHRpbWUgZm9ybWF0XG4gKi9cblxudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIEVyYVxuICBHOiBmdW5jdGlvbiBHKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBlcmEgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgPiAwID8gMSA6IDA7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gQUQsIEJDXG4gICAgICBjYXNlICdHJzpcbiAgICAgIGNhc2UgJ0dHJzpcbiAgICAgIGNhc2UgJ0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBBLCBCXG4gICAgICBjYXNlICdHR0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcbiAgICAgIGNhc2UgJ0dHR0cnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAneW8nKSB7XG4gICAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoeWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnkoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFk6IGZ1bmN0aW9uIFkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHNpZ25lZFdlZWtZZWFyID0gZ2V0VVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgd2Vla1llYXIgPSBzaWduZWRXZWVrWWVhciA+IDAgPyBzaWduZWRXZWVrWWVhciA6IDEgLSBzaWduZWRXZWVrWWVhcjtcblxuICAgIC8vIFR3byBkaWdpdCB5ZWFyXG4gICAgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgICB2YXIgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7XG4gICAgfVxuXG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICdZbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIFIoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgaXNvV2Vla1llYXIgPSBnZXRVVENJU09XZWVrWWVhcihkYXRlKTtcblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBFeHRlbmRlZCB5ZWFyLiBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZyB0aGUgeWVhciBvZiB0aGlzIGNhbGVuZGFyIHN5c3RlbS5cbiAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIGxvY2FsaXplcnMgYXJlIEIuQy4geWVhcnM6XG4gIC8vIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gIC8vIHwtLS0tLS18LS0tLS18LS0tLS18XG4gIC8vIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gIC8vIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gIC8vIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gIC8vIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAgLy8gd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkLlxuICB1OiBmdW5jdGlvbiB1KGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBRdWFydGVyXG4gIFE6IGZ1bmN0aW9uIFEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAnUSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAnUVEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdRbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAnUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAnUVFRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdRUVFRJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcTogZnVuY3Rpb24gcShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdxJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdxcSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ3FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdxcXFxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ3FxcXEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnTSc6XG4gICAgICBjYXNlICdNTSc6XG4gICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdNbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ01NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTU1NTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ01NTU0nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbiBMKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhtb250aCArIDEpO1xuICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMTCc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ0xvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdMTExMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTExMTCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIHdlZWsgb2YgeWVhclxuICB3OiBmdW5jdGlvbiB3KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciB3ZWVrID0gZ2V0VVRDV2VlayhkYXRlLCBvcHRpb25zKTtcbiAgICBpZiAodG9rZW4gPT09ICd3bycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIEkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGlzb1dlZWsgPSBnZXRVVENJU09XZWVrKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvV2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdkbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDRGF0ZSgpLCB7XG4gICAgICAgIHVuaXQ6ICdkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IGZ1bmN0aW9uIEQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mWWVhciA9IGdldFVUQ0RheU9mWWVhcihkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdEbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwge1xuICAgICAgICB1bml0OiAnZGF5T2ZZZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF5T2ZZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2Ygd2Vla1xuICBFOiBmdW5jdGlvbiBFKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnRSc6XG4gICAgICBjYXNlICdFRSc6XG4gICAgICBjYXNlICdFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ0VFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ0VFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnRUVFRSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgZGF5IG9mIHdlZWtcbiAgZTogZnVuY3Rpb24gZShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbilcbiAgICAgIGNhc2UgJ2UnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2VlJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2VvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2VlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnZWVlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdlZWVlJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiBmdW5jdGlvbiBjKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoc2FtZSBhcyBpbiBgZWApXG4gICAgICBjYXNlICdjJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2NvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnY2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdjY2NjJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBJU08gZGF5IG9mIHdlZWtcbiAgaTogZnVuY3Rpb24gaShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgaXNvRGF5T2ZXZWVrID0gZGF5T2ZXZWVrID09PSAwID8gNyA6IGRheU9mV2VlaztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAyXG4gICAgICBjYXNlICdpJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcbiAgICAgIGNhc2UgJ2lpJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29EYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAybmRcbiAgICAgIGNhc2UgJ2lvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ2lpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnaWlpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdpaWlpJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0sIFBNLCBtaWRuaWdodCwgbm9vblxuICBiOiBmdW5jdGlvbiBiKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA9PT0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYic6XG4gICAgICBjYXNlICdiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2JiYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiYic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiBCKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA+PSAxNykge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ldmVuaW5nO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uYWZ0ZXJub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gNCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5tb3JuaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5pZ2h0O1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdCJzpcbiAgICAgIGNhc2UgJ0JCJzpcbiAgICAgIGNhc2UgJ0JCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2hvJykge1xuICAgICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMTI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ0hvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENIb3VycygpLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIEsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgaWYgKHRva2VuID09PSAnS28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFsxLTI0XVxuICBrOiBmdW5jdGlvbiBrKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7XG4gICAgaWYgKHRva2VuID09PSAna28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdtbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDTWludXRlcygpLCB7XG4gICAgICAgIHVuaXQ6ICdtaW51dGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5tKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnc28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ1NlY29uZHMoKSwge1xuICAgICAgICB1bml0OiAnc2Vjb25kJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5TKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGFsd2F5cyBgJ1onYClcbiAgWDogZnVuY3Rpb24gWChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuICdaJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ1gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgXG4gICAgICBjYXNlICdYWFhYJzpcbiAgICAgIGNhc2UgJ1hYJzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGBcbiAgICAgIGNhc2UgJ1hYWFhYJzpcbiAgICAgIGNhc2UgJ1hYWCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgeDogZnVuY3Rpb24geChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICd4JzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuICAgICAgY2FzZSAneHh4eCc6XG4gICAgICBjYXNlICd4eCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG4gICAgICBjYXNlICd4eHh4eCc6XG4gICAgICBjYXNlICd4eHgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChHTVQpXG4gIE86IGZ1bmN0aW9uIE8oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAnTyc6XG4gICAgICBjYXNlICdPTyc6XG4gICAgICBjYXNlICdPT08nOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnT09PTyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pXG4gIHo6IGZ1bmN0aW9uIHooZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAneic6XG4gICAgICBjYXNlICd6eic6XG4gICAgICBjYXNlICd6enonOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnenp6eic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIHQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gTWF0aC5mbG9vcihvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gVChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBvcmlnaW5hbERhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApO1xuICB2YXIgbWludXRlcyA9IGFic09mZnNldCAlIDYwO1xuICBpZiAobWludXRlcyA9PT0gMCkge1xuICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTtcbiAgfVxuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkge1xuICAgIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpO1xuICB9XG4gIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCksIDIpO1xuICB2YXIgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAidmFyIGRhdGVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIHRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gdGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAncHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHBwJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHZhciBtYXRjaFJlc3VsdCA9IHBhdHRlcm4ubWF0Y2goLyhQKykocCspPy8pIHx8IFtdO1xuICB2YXIgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgdmFyIHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07XG4gIGlmICghdGltZVBhdHRlcm4pIHtcbiAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZyk7XG4gIH1cbiAgdmFyIGRhdGVUaW1lRm9ybWF0O1xuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0LnJlcGxhY2UoJ3t7ZGF0ZX19JywgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcpKS5yZXBsYWNlKCd7e3RpbWV9fScsIHRpbWVMb25nRm9ybWF0dGVyKHRpbWVQYXR0ZXJuLCBmb3JtYXRMb25nKSk7XG59O1xudmFyIGxvbmdGb3JtYXR0ZXJzID0ge1xuICBwOiB0aW1lTG9uZ0Zvcm1hdHRlcixcbiAgUDogZGF0ZVRpbWVMb25nRm9ybWF0dGVyXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9uZ0Zvcm1hdHRlcnM7IiwgIi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkpO1xuICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIHJldHVybiBkYXRlLmdldFRpbWUoKSAtIHV0Y0RhdGUuZ2V0VGltZSgpO1xufSIsICJ2YXIgcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zID0gWydEJywgJ0REJ107XG52YXIgcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMgPSBbJ1lZJywgJ1lZWVknXTtcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgaWYgKHRva2VuID09PSAnWVlZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnRCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnREQnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9XG59IiwgInZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIHNlY29uZCcsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIHhTZWNvbmRzOiB7XG4gICAgb25lOiAnMSBzZWNvbmQnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIGhhbGZBTWludXRlOiAnaGFsZiBhIG1pbnV0ZScsXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBtaW51dGUnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICB4TWludXRlczoge1xuICAgIG9uZTogJzEgbWludXRlJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgaG91cicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhIb3Vyczoge1xuICAgIG9uZTogJzEgaG91cicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhEYXlzOiB7XG4gICAgb25lOiAnMSBkYXknLFxuICAgIG90aGVyOiAne3tjb3VudH19IGRheXMnXG4gIH0sXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB3ZWVrJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgeFdlZWtzOiB7XG4gICAgb25lOiAnMSB3ZWVrJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgYWJvdXRYTW9udGhzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBtb250aCcsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICB4TW9udGhzOiB7XG4gICAgb25lOiAnMSBtb250aCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIHhZZWFyczoge1xuICAgIG9uZTogJzEgeWVhcicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6ICdvdmVyIDEgeWVhcicsXG4gICAgb3RoZXI6ICdvdmVyIHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiAnYWxtb3N0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhbG1vc3Qge3tjb3VudH19IHllYXJzJ1xuICB9XG59O1xudmFyIGZvcm1hdERpc3RhbmNlID0gZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UodG9rZW4sIGNvdW50LCBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQ7XG4gIHZhciB0b2tlblZhbHVlID0gZm9ybWF0RGlzdGFuY2VMb2NhbGVbdG9rZW5dO1xuICBpZiAodHlwZW9mIHRva2VuVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZSgne3tjb3VudH19JywgY291bnQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gJ2luICcgKyByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAnIGFnbyc7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGlzdGFuY2U7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRm9ybWF0TG9uZ0ZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgLy8gVE9ETzogUmVtb3ZlIFN0cmluZygpXG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgIHZhciBmb3JtYXQgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkRm9ybWF0TG9uZ0ZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuL2luZGV4LmpzXCI7XG52YXIgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdFRUVFLCBNTU1NIGRvLCB5JyxcbiAgbG9uZzogJ01NTU0gZG8sIHknLFxuICBtZWRpdW06ICdNTU0gZCwgeScsXG4gIHNob3J0OiAnTU0vZGQveXl5eSdcbn07XG52YXIgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdoOm1tOnNzIGEgenp6eicsXG4gIGxvbmc6ICdoOm1tOnNzIGEgeicsXG4gIG1lZGl1bTogJ2g6bW06c3MgYScsXG4gIHNob3J0OiAnaDptbSBhJ1xufTtcbnZhciBkYXRlVGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbWVkaXVtOiAne3tkYXRlfX0sIHt7dGltZX19JyxcbiAgc2hvcnQ6ICd7e2RhdGV9fSwge3t0aW1lfX0nXG59O1xudmFyIGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdExvbmc7IiwgInZhciBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6ICdQJ1xufTtcbnZhciBmb3JtYXRSZWxhdGl2ZSA9IGZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlKHRva2VuLCBfZGF0ZSwgX2Jhc2VEYXRlLCBfb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UmVsYXRpdmVMb2NhbGVbdG9rZW5dO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFJlbGF0aXZlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZExvY2FsaXplRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRpcnR5SW5kZXgsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogJ3N0YW5kYWxvbmUnO1xuICAgIHZhciB2YWx1ZXNBcnJheTtcbiAgICBpZiAoY29udGV4dCA9PT0gJ2Zvcm1hdHRpbmcnICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciB3aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBkZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1t3aWR0aF0gfHwgYXJncy5mb3JtYXR0aW5nVmFsdWVzW2RlZmF1bHRXaWR0aF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgX3dpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1tfd2lkdGhdIHx8IGFyZ3MudmFsdWVzW19kZWZhdWx0V2lkdGhdO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2soZGlydHlJbmRleCkgOiBkaXJ0eUluZGV4O1xuICAgIC8vIEB0cy1pZ25vcmU6IEZvciBzb21lIHJlYXNvbiBUeXBlU2NyaXB0IGp1c3QgZG9uJ3Qgd2FudCB0byBtYXRjaCBpdCwgbm8gbWF0dGVyIGhvdyBoYXJkIHdlIHRyeS4gSSBjaGFsbGVuZ2UgeW91IHRvIHRyeSB0byByZW1vdmUgaXQhXG4gICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4XTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTG9jYWxpemVGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanNcIjtcbnZhciBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydCJywgJ0EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnQkMnLCAnQUQnXSxcbiAgd2lkZTogWydCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJ11cbn07XG52YXIgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbJzEnLCAnMicsICczJywgJzQnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnUTEnLCAnUTInLCAnUTMnLCAnUTQnXSxcbiAgd2lkZTogWycxc3QgcXVhcnRlcicsICcybmQgcXVhcnRlcicsICczcmQgcXVhcnRlcicsICc0dGggcXVhcnRlciddXG59O1xuXG4vLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG52YXIgbW9udGhWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydKJywgJ0YnLCAnTScsICdBJywgJ00nLCAnSicsICdKJywgJ0EnLCAnUycsICdPJywgJ04nLCAnRCddLFxuICBhYmJyZXZpYXRlZDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuICB3aWRlOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXVxufTtcbnZhciBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ10sXG4gIHNob3J0OiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXG4gIGFiYnJldmlhdGVkOiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuICB3aWRlOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J11cbn07XG52YXIgZGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH1cbn07XG52YXIgZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9XG59O1xudmFyIG9yZGluYWxOdW1iZXIgPSBmdW5jdGlvbiBvcmRpbmFsTnVtYmVyKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykge1xuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICAvLyBJZiBvcmRpbmFsIG51bWJlcnMgZGVwZW5kIG9uIGNvbnRleHQsIGZvciBleGFtcGxlLFxuICAvLyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCBncmFtbWF0aWNhbCBnZW5kZXJzLFxuICAvLyB1c2UgYG9wdGlvbnMudW5pdGAuXG4gIC8vXG4gIC8vIGB1bml0YCBjYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RhdGUnLCAnZGF5T2ZZZWFyJyxcbiAgLy8gJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLlxuXG4gIHZhciByZW0xMDAgPSBudW1iZXIgJSAxMDA7XG4gIGlmIChyZW0xMDAgPiAyMCB8fCByZW0xMDAgPCAxMCkge1xuICAgIHN3aXRjaCAocmVtMTAwICUgMTApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdzdCc7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnbmQnO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3JkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bWJlciArICd0aCc7XG59O1xudmFyIGxvY2FsaXplID0ge1xuICBvcmRpbmFsTnVtYmVyOiBvcmRpbmFsTnVtYmVyLFxuICBlcmE6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBlcmFWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IGZ1bmN0aW9uIGFyZ3VtZW50Q2FsbGJhY2socXVhcnRlcikge1xuICAgICAgcmV0dXJuIHF1YXJ0ZXIgLSAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogbW9udGhWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogJ3dpZGUnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxpemU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGg7XG4gICAgdmFyIG1hdGNoUGF0dGVybiA9IHdpZHRoICYmIGFyZ3MubWF0Y2hQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5tYXRjaFBhdHRlcm5zW2FyZ3MuZGVmYXVsdE1hdGNoV2lkdGhdO1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChtYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG4gICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkocGFyc2VQYXR0ZXJucykgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSkgOiBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59XG5mdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkgJiYgcHJlZGljYXRlKG9iamVjdFtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoUGF0dGVybkZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MubWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7XG4gICAgaWYgKCFwYXJzZVJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKHBhcnNlUmVzdWx0WzBdKSA6IHBhcnNlUmVzdWx0WzBdO1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59IiwgImltcG9ydCBidWlsZE1hdGNoRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaEZuL2luZGV4LmpzXCI7XG5pbXBvcnQgYnVpbGRNYXRjaFBhdHRlcm5GbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuL2luZGV4LmpzXCI7XG52YXIgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKHRofHN0fG5kfHJkKT8vaTtcbnZhciBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcbnZhciBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGJ8YSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGJcXC4/XFxzP2NcXC4/fGJcXC4/XFxzP2NcXC4/XFxzP2VcXC4/fGFcXC4/XFxzP2RcXC4/fGNcXC4/XFxzP2VcXC4/KS9pLFxuICB3aWRlOiAvXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2lcbn07XG52YXIgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL15iL2ksIC9eKGF8YykvaV1cbn07XG52YXIgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaVxufTtcbnZhciBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV1cbn07XG52YXIgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2lcbn07XG52YXIgcGFyc2VNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXmovaSwgL15mL2ksIC9ebS9pLCAvXmEvaSwgL15tL2ksIC9eai9pLCAvXmovaSwgL15hL2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXSxcbiAgYW55OiBbL15qYS9pLCAvXmYvaSwgL15tYXIvaSwgL15hcC9pLCAvXm1heS9pLCAvXmp1bi9pLCAvXmp1bC9pLCAvXmF1L2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXVxufTtcbnZhciBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pXG59O1xudmFyIHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXVxufTtcbnZhciBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaVxufTtcbnZhciBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL15hL2ksXG4gICAgcG06IC9ecC9pLFxuICAgIG1pZG5pZ2h0OiAvXm1pL2ksXG4gICAgbm9vbjogL15uby9pLFxuICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksXG4gICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksXG4gICAgZXZlbmluZzogL2V2ZW5pbmcvaSxcbiAgICBuaWdodDogL25pZ2h0L2lcbiAgfVxufTtcbnZhciBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKHZhbHVlKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH0pLFxuICBlcmE6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2soaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCArIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICdhbnknLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbWF0Y2g7IiwgImltcG9ydCBmb3JtYXREaXN0YW5jZSBmcm9tIFwiLi9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0TG9uZyBmcm9tIFwiLi9fbGliL2Zvcm1hdExvbmcvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRSZWxhdGl2ZSBmcm9tIFwiLi9fbGliL2Zvcm1hdFJlbGF0aXZlL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9jYWxpemUgZnJvbSBcIi4vX2xpYi9sb2NhbGl6ZS9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoIGZyb20gXCIuL19saWIvbWF0Y2gvaW5kZXguanNcIjtcbi8qKlxuICogQHR5cGUge0xvY2FsZX1cbiAqIEBjYXRlZ29yeSBMb2NhbGVzXG4gKiBAc3VtbWFyeSBFbmdsaXNoIGxvY2FsZSAoVW5pdGVkIFN0YXRlcykuXG4gKiBAbGFuZ3VhZ2UgRW5nbGlzaFxuICogQGlzby02MzktMiBlbmdcbiAqIEBhdXRob3IgU2FzaGEgS29zcyBbQGtvc3Nub2NvcnBde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9rb3Nzbm9jb3JwfVxuICogQGF1dGhvciBMZXNoYSBLb3NzIFtAbGVzaGFrb3NzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbGVzaGFrb3NzfVxuICovXG52YXIgbG9jYWxlID0ge1xuICBjb2RlOiAnZW4tVVMnLFxuICBmb3JtYXREaXN0YW5jZTogZm9ybWF0RGlzdGFuY2UsXG4gIGZvcm1hdExvbmc6IGZvcm1hdExvbmcsXG4gIGZvcm1hdFJlbGF0aXZlOiBmb3JtYXRSZWxhdGl2ZSxcbiAgbG9jYWxpemU6IGxvY2FsaXplLFxuICBtYXRjaDogbWF0Y2gsXG4gIG9wdGlvbnM6IHtcbiAgICB3ZWVrU3RhcnRzT246IDAgLyogU3VuZGF5ICovLFxuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMVxuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxlOyIsICJpbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vLi4vbG9jYWxlL2VuLVVTL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0TG9jYWxlOyIsICJpbXBvcnQgaXNWYWxpZCBmcm9tIFwiLi4vaXNWYWxpZC9pbmRleC5qc1wiO1xuaW1wb3J0IHN1Yk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9uZ0Zvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuLCBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4sIHRocm93UHJvdGVjdGVkRXJyb3IgfSBmcm9tIFwiLi4vX2xpYi9wcm90ZWN0ZWRUb2tlbnMvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qc1wiOyAvLyBUaGlzIFJlZ0V4cCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cyBzZXBhcmF0ZWQgYnkgYHxgOlxuLy8gLSBbeVlRcU1Md0lkRGVjaWhIS2ttc11vIG1hdGNoZXMgYW55IGF2YWlsYWJsZSBvcmRpbmFsIG51bWJlciB0b2tlblxuLy8gICAob25lIG9mIHRoZSBjZXJ0YWluIGxldHRlcnMgZm9sbG93ZWQgYnkgYG9gKVxuLy8gLSAoXFx3KVxcMSogbWF0Y2hlcyBhbnkgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIGxldHRlclxuLy8gLSAnJyBtYXRjaGVzIHR3byBxdW90ZSBjaGFyYWN0ZXJzIGluIGEgcm93XG4vLyAtICcoJyd8W14nXSkrKCd8JCkgbWF0Y2hlcyBhbnl0aGluZyBzdXJyb3VuZGVkIGJ5IHR3byBxdW90ZSBjaGFyYWN0ZXJzICgnKSxcbi8vICAgZXhjZXB0IGEgc2luZ2xlIHF1b3RlIHN5bWJvbCwgd2hpY2ggZW5kcyB0aGUgc2VxdWVuY2UuXG4vLyAgIFR3byBxdW90ZSBjaGFyYWN0ZXJzIGRvIG5vdCBlbmQgdGhlIHNlcXVlbmNlLlxuLy8gICBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBzaW5nbGUgcXVvdGVcbi8vICAgdGhlbiB0aGUgc2VxdWVuY2Ugd2lsbCBjb250aW51ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG4vLyAtIC4gbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciB1bm1hdGNoZWQgYnkgcHJldmlvdXMgcGFydHMgb2YgdGhlIFJlZ0V4cHNcbnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG4vLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG52YXIgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcbnZhciBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG52YXIgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbnZhciB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG5cbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqID4gXHUyNkEwXHVGRTBGIFBsZWFzZSBub3RlIHRoYXQgdGhlIGBmb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKiAoc2VlIHRoZSBsYXN0IGV4YW1wbGUpXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDcgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBBY2NlcHRlZCBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDB0aCwgMTd0aCAgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgMjAxN3RoICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgUiAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSICAgICAgfCAtNDMsIDAwLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAwLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAwLCAwMDAxLCAxOTAwLCAyMDE3ICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUsNyB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCB1ICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCA3ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhICAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWEgICAgIHwgYW0sIHBtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCBiLi5iYiAgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiICAgICB8IGFtLCBwbSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmIgICAgfCBhLm0uLCBwLm0uLCBub29uLCBtaWRuaWdodCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiYiAgIHwgYSwgcCwgbiwgbWkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgIHwgQi4uQkJCICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkIgICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCQiAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgIHwgaCAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAxMnRoICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaCAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhvICAgICAgfCAwdGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgIHwgSyAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAwdGggICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLSyAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgIHwgayAgICAgICB8IDI0LCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtvICAgICAgfCAyNHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrayAgICAgIHwgMjQsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbSAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbSAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcyAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcyAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDEsIC4uLiwgOTk5ICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICAgfCBPLi4uT09PIHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT09PTyAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pICB8IHouLi56enogfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCA2ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB6enp6ICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiw2ICAgfFxuICogfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgIHwgdCAgICAgICB8IDUxMjk2OTUyMCAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR0ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8IFAgICAgICAgfCAwNC8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUCAgICAgIHwgQXByIDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQICAgICB8IEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFAgICAgfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcCAgICAgfCAxMjowMDowMCBBTSBHTVQrMiAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHBwICAgIHwgMTI6MDA6MDAgQU0gR01UKzAyOjAwICAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBDb21iaW5hdGlvbiBvZiBkYXRlIGFuZCB0aW1lICAgIHwgUHAgICAgICB8IDA0LzI5LzE0NTMsIDEyOjAwIEFNICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQcHAgICAgfCBBcHIgMjksIDE0NTMsIDEyOjAwOjAwIEFNICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBwcHAgIHwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUHBwcHB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICB8IDIsNyAgIHxcbiAqIE5vdGVzOlxuICogMS4gXCJGb3JtYXR0aW5nXCIgdW5pdHMgKGUuZy4gZm9ybWF0dGluZyBxdWFydGVyKSBpbiB0aGUgZGVmYXVsdCBlbi1VUyBsb2NhbGVcbiAqICAgIGFyZSB0aGUgc2FtZSBhcyBcInN0YW5kLWFsb25lXCIgdW5pdHMsIGJ1dCBhcmUgZGlmZmVyZW50IGluIHNvbWUgbGFuZ3VhZ2VzLlxuICogICAgXCJGb3JtYXR0aW5nXCIgdW5pdHMgYXJlIGRlY2xpbmVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxhbmd1YWdlXG4gKiAgICBpbiB0aGUgY29udGV4dCBvZiBhIGRhdGUuIFwiU3RhbmQtYWxvbmVcIiB1bml0cyBhcmUgYWx3YXlzIG5vbWluYXRpdmUgc2luZ3VsYXI6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqIDIuIEFueSBzZXF1ZW5jZSBvZiB0aGUgaWRlbnRpY2FsIGxldHRlcnMgaXMgYSBwYXR0ZXJuLCB1bmxlc3MgaXQgaXMgZXNjYXBlZCBieVxuICogICAgdGhlIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIChzZWUgYmVsb3cpLlxuICogICAgSWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIGxpc3RlZCBpbiB0YWJsZSAoZS5nLiBgRUVFRUVFRUVFRUVgKVxuICogICAgdGhlIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRlZmF1bHQgcGF0dGVybiBmb3IgdGhpcyB1bml0LCB1c3VhbGx5XG4gKiAgICB0aGUgbG9uZ2VzdCBvbmUgKGluIGNhc2Ugb2YgSVNPIHdlZWtkYXlzLCBgRUVFRWApLiBEZWZhdWx0IHBhdHRlcm5zIGZvciB1bml0c1xuICogICAgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU0nKSAvLz0+ICdOb3YnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NJykgLy89PiAnTidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqIDMuIFNvbWUgcGF0dGVybnMgY291bGQgYmUgdW5saW1pdGVkIGxlbmd0aCAoc3VjaCBhcyBgeXl5eXl5eXlgKS5cbiAqICAgIFRoZSBvdXRwdXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB6ZXJvcyB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAneXl5eXl5eXknKSAvLz0+ICcwMDAwMjAxNydgXG4gKlxuICogNC4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNS4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAqICAgIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZDpcbiAqXG4gKiAgICB8IFllYXIgfCBgeXlgIHwgYHV1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gKiAgICB8IDEgICAgfCAgIDAxIHwgICAwMSB8XG4gKiAgICB8IDE0ICAgfCAgIDE0IHwgICAxNCB8XG4gKiAgICB8IDM3NiAgfCAgIDc2IHwgIDM3NiB8XG4gKiAgICB8IDE0NTMgfCAgIDUzIHwgMTQ1MyB8XG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbZ2V0SVNPV2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0SVNPV2Vla1llYXJ9XG4gKiAgICBhbmQgW2dldFdlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldFdlZWtZZWFyfSkuXG4gKlxuICogNi4gU3BlY2lmaWMgbm9uLWxvY2F0aW9uIHRpbWV6b25lcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGluIGBkYXRlLWZuc2AsXG4gKiAgICBzbyByaWdodCBub3cgdGhlc2UgdG9rZW5zIGZhbGwgYmFjayB0byBHTVQgdGltZXpvbmVzLlxuICpcbiAqIDcuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYHRgOiBzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgVGA6IG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogOC4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA5LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIGRheXMgb2YgdGhlIG1vbnRoLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIHRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIgdG9rZW5zIGBZWWAgYW5kIGBZWVlZYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSBkYXkgb2YgeWVhciB0b2tlbnMgYERgIGFuZCBgRERgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRMb25nYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgN1xuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdChkaXJ0eURhdGUsIGRpcnR5Rm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfb3B0aW9ucyRsb2NhbGUsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlMiwgX29wdGlvbnMkbG9jYWxlMiRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIsIF9yZWY1LCBfcmVmNiwgX3JlZjcsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlMywgX29wdGlvbnMkbG9jYWxlMyRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0O1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGZvcm1hdFN0ciA9IFN0cmluZyhkaXJ0eUZvcm1hdFN0cik7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBsb2NhbGUgPSAoX3JlZiA9IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRsb2NhbGUgIT09IHZvaWQgMCA/IF9vcHRpb25zJGxvY2FsZSA6IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IGRlZmF1bHRMb2NhbGU7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYyID0gKF9yZWYzID0gKF9yZWY0ID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiRvcHRpID0gX29wdGlvbnMkbG9jYWxlMi5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTIkb3B0aS5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWY0ICE9PSB2b2lkIDAgPyBfcmVmNCA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWY1ID0gKF9yZWY2ID0gKF9yZWY3ID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyRvcHRpID0gX29wdGlvbnMkbG9jYWxlMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTMkb3B0aS53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY3ICE9PSB2b2lkIDAgPyBfcmVmNyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjYgIT09IHZvaWQgMCA/IF9yZWY2IDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0LndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjUgIT09IHZvaWQgMCA/IF9yZWY1IDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIGlmICghbG9jYWxlLmxvY2FsaXplKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gbG9jYWxpemUgcHJvcGVydHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5mb3JtYXRMb25nKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gZm9ybWF0TG9uZyBwcm9wZXJ0eScpO1xuICB9XG4gIHZhciBvcmlnaW5hbERhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIH1cblxuICAvLyBDb252ZXJ0IHRoZSBkYXRlIGluIHN5c3RlbSB0aW1lem9uZSB0byB0aGUgc2FtZSBkYXRlIGluIFVUQyswMDowMCB0aW1lem9uZS5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBVVEMgZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQsIGxvY2FsZXMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlbS5cbiAgLy8gU2VlIGFuIGlzc3VlIGFib3V0IFVUQyBmdW5jdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG4gIHZhciB0aW1lem9uZU9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlKTtcbiAgdmFyIHV0Y0RhdGUgPSBzdWJNaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlLCB0aW1lem9uZU9mZnNldCk7XG4gIHZhciBmb3JtYXR0ZXJPcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbjogd2Vla1N0YXJ0c09uLFxuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIF9vcmlnaW5hbERhdGU6IG9yaWdpbmFsRGF0ZVxuICB9O1xuICB2YXIgcmVzdWx0ID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICdwJyB8fCBmaXJzdENoYXJhY3RlciA9PT0gJ1AnKSB7XG4gICAgICB2YXIgbG9uZ0Zvcm1hdHRlciA9IGxvbmdGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgIHJldHVybiBcIidcIjtcbiAgICB9XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCInXCIpIHtcbiAgICAgIHJldHVybiBjbGVhbkVzY2FwZWRTdHJpbmcoc3Vic3RyaW5nKTtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdHRlcih1dGNEYXRlLCBzdWJzdHJpbmcsIGxvY2FsZS5sb2NhbGl6ZSwgZm9ybWF0dGVyT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChmaXJzdENoYXJhY3Rlci5tYXRjaCh1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCcgKyBmaXJzdENoYXJhY3RlciArICdgJyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIHZhciBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICByZXR1cm4gbWF0Y2hlZFsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwLCBcIidcIik7XG59IiwgImV4cG9ydCBjb25zdCBwb2ludHNOb3RlTWFqdXJpdHkgPSAxMDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNNYWp1cml0eSA9IDEwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgPSA1MDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgPSAyMDAwO1xyXG5leHBvcnQgY29uc3QgYXZhdGFySW5pdENvbnRlbnQgPSAgYCMgQXZhdGFyXHJcblxyXG58ICAgICAgICB8ICAgICB8XHJcbnwgLS0tLS0tIHwgLS0tIHxcclxufCBMZXZlbCAgfCAwICAgIHxcclxufCBQb2ludHMgfCAwICAgIHxcclxuXmxldmVsQW5kUG9pbnRzXHRcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW0V4cHJpcmllbmNlXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXHJcbiAgICBkYXRhOiBbMTAwMF1cclxueE1pbjogMFxyXG54TWF4OiAxMDAwXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCAgICAgICAgICAgICB8ICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLSB8IC0tLSB8IC0tLS0tIHxcclxufCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKiowLzIqKiB8XHJcbl5kYWlseU5vdGVzQ2hhbGxlbmdlXHJcbnwgIHwgICAgIHx8XHJcbnwgLS0tLSB8IC0tLSB8IC0tLSB8XHJcbnwgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKjAvNyoqICAgfFxyXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW05vdGVzXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogZGF5cyBkb25lIGluIGEgcm93XHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XHJcbiAgICBkYXRhOiBbN11cclxueE1pbjogMFxyXG54TWF4OiA3XHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwiZGF5c1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58IExldmVsIHwgQ291bnQgfFxyXG58IDotLS06IHwgOi0tLTogfFxyXG58IE1hanVyaXR5IDUgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs1LCAnNScsICc1XHUyN0ExXHVGRTBGJywgJzVcdTJCMDdcdUZFMEYnLCAnNVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDQgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs0LCAnNCcsICc0XHUyN0ExXHVGRTBGJywgJzRcdTJCMDdcdUZFMEYnLCAnNFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDMgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFszLCAnMycsICczXHUyN0ExXHVGRTBGJywgJzNcdTJCMDdcdUZFMEYnLCAnM1x1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDIgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsyLCAnMicsICcyXHUyN0ExXHVGRTBGJywgJzJcdTJCMDdcdUZFMEYnLCAnMlx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDEgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsxLCAnMScsICcxXHUyN0ExXHVGRTBGJywgJzFcdTJCMDdcdUZFMEYnLCAnMVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDAgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFswLCAnMCcsICcwXHUyN0ExXHVGRTBGJywgJzBcdTJCMDdcdUZFMEYnLCAnMFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG5cclxuXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFswLCAwLCAwXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogbW9kaWZpZWRcclxuICAgIGRhdGE6IFswLCAwLCAwXVxyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDgwICVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxueVRpdGxlOiBcIk51bWJlciBvZiBOb3Rlc1wiXHJcbnhUaXRsZTogXCJNb250aHNcIlxyXG54TWluOiAwXHJcblxcYFxcYFxcYFxyXG5eQ2hhcnRNb250aFxyXG5cclxuXHJcbiMjIyBCYWRnZXNcclxuIyMjIyBhY2hpZXZlZFxyXG5cclxuXHJcbiMjIyMgb3V0c3RhbmRpbmdcclxubGV2ZWwgNTogKkVubGlnaHRlbmVkIE5vdmljZSpcclxubGV2ZWwgMTA6ICpDdXJpb3VzIENvbm5vaXNzZXVyKlxyXG5sZXZlbCAyMDogKkJyYWluaWFjIFRyYWlsYmxhemVyKlxyXG5sZXZlbCAyNzogKlNjaG9sYXJseSBUcmFpbGJsYXplcipcclxubGV2ZWwgMzU6ICpJbmZvIE5pbmphIE1hc3RlcipcclxubGV2ZWwgNDI6ICpXaXNlIE93bCBHdXJ1KlxyXG5sZXZlbCA1MDogKkVpbnN0ZWluIEluY2FybmF0ZSpcclxubGV2ZWwgNjA6ICpNYXN0ZXJtaW5kIFNhZ2UqXHJcbmxldmVsIDc1OiAqQ2VyZWJyYWwgTWFlc3RybypcclxubGV2ZWwgODI6ICpaZW4gS25vd2xlZGdlIEtlZXBlcipcclxubGV2ZWwgOTA6ICpHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQqXHJcbmxldmVsIDEwMDogKk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nKlxyXG5cclxuXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNSoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA1IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA0KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDQgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAzXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAzIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDFcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDEgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAwXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAwIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuYDtcclxuIiwgImltcG9ydCB7IFRGaWxlLCBBcHAsIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZVByb2dyZXNzaXZlU3VtbWFyaXphdGlvbihjaGFyQ291bnRUb3RhbDogbnVtYmVyLCBsYXllcjJjb3VudDogbnVtYmVyLCBsYXllcjNjb3VudDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRjb25zdCBwZXJjZW50TGF5ZXIyID0gbGF5ZXIyY291bnQgKiAxMDAgLyBjaGFyQ291bnRUb3RhbDtcclxuICAgIGNvbnN0IHBlcmNlbnRMYXllcjMgPSBsYXllcjNjb3VudCAqIDEwMCAvIGxheWVyMmNvdW50O1xyXG5cdHZhciBsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0dmFyIGxheWVyM21hanVyaXR5ID0gMDtcclxuXHR2YXIgbWFqdXJpdHkgPSAwO1xyXG5cdGlmIChjaGFyQ291bnRUb3RhbCA8IDMwMDApIHtcclxuXHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdC8vY29uc29sZS5sb2coYE5vdGUgaXMgbm90IGxvbmcgZW5vdWdoIHRvIGdldCBpbnRvIGNhbGN1bGF0aW9uIGZvciBtYWp1cml0eS4gVGhlIHRvdGFsIGNoYXJhY3RlciBjb3VudCBpcyAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRpZiAocGVyY2VudExheWVyMiA9PSAwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDMwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjNjb3VudCA9PSAwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjJtYWp1cml0eSA9PSAxICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSAyICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA+PSAzICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmICgobGF5ZXIybWFqdXJpdHkgPT0gMyB8fCBsYXllcjJtYWp1cml0eSA9PSA0KSAmJiAobGF5ZXIzbWFqdXJpdHkgPT0gNCB8fCBsYXllcjNtYWp1cml0eSA9PSA1KSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDUgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gNSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRcclxuXHQvL2NvbnNvbGUubG9nKGBsYXllcjJtYWp1cml0eTogJHtsYXllcjJtYWp1cml0eX0gXFx0bGF5ZXIzbWFqdXJpdHk6ICR7bGF5ZXIzbWFqdXJpdHl9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYHBlcmNlbnRMYXllcjI6ICR7cGVyY2VudExheWVyMn0gXFx0cGVyY2VudExheWVyMzogJHtwZXJjZW50TGF5ZXIzfSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBjaGFyQ291bnRUb3RhbDogJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHRyZXR1cm4gbWFqdXJpdHk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgbGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKTogeyBjaGFyQ291bnQ6IG51bWJlcjsgaGlnaGxpZ2h0ZWRDb3VudDogbnVtYmVyOyBib2xkQ291bnQ6IG51bWJlciB9IHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblxyXG5cdC8vIGNhbGN1bGF0ZSBMYXllciAyICYgMyBMZW5ndGhcclxuXHJcblx0Ly8gQ291bnQgdGhlIGhpZ2hsaWdodGVkIGFuZCBib2xkIGNoYXJhY3RlcnNcclxuXHRsZXQgaGlnaGxpZ2h0ZWRDb3VudCA9IDA7XHJcblx0bGV0IGJvbGRDb3VudCA9IDA7XHJcbiAgXHJcblx0dmFyIGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR2YXIgbGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHQvLyB0byBoYXZlIHRoZSByZWcgZXggY29ycmVjdC4gb3RoZXJ3aXNlIGl0IHdpbGwgZ2V0IHN0dWMgd2l0aCAqKi5cclxuXHRpZihsYXllcjMgPT0gJyoqJyl7XHJcblx0XHRsYXllcjMgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0XHRsYXllcjJleGNsdWRlID0gJz0nXHJcblx0fVxyXG5cdGlmKGxheWVyMiA9PSAnKionKXtcclxuXHRcdGxheWVyMiA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICc9J1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICdcXFxcKidcclxuXHR9XHJcbiAgXHRcclxuXHJcblx0Y29uc3QgaGlnaGxpZ2h0UmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyMn1bXiR7bGF5ZXIyZXhjbHVkZX1dKyR7bGF5ZXIyfWAsIFwiZ1wiKTtcclxuICAgIGNvbnN0IGJvbGRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIzfVteJHtsYXllcjNleGNsdWRlfV0rJHtsYXllcjN9YCwgXCJnXCIpO1xyXG4gIFxyXG5cdC8vIENvdW50IGhpZ2hsaWdodGVkIGNoYXJhY3RlcnNcclxuXHRjb25zdCBoaWdobGlnaHRlZE1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKGhpZ2hsaWdodFJlZ2V4KTtcclxuXHRpZiAoaGlnaGxpZ2h0ZWRNYXRjaGVzKSB7XHJcblx0ICBoaWdobGlnaHRlZENvdW50ID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGhpZ2hsaWdodGVkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnPT0nXHJcblx0ICAvLyBmaXJzdCB0YWtlIHRoZSBsYXllcjIgKGhpZ2hsaWdodGVkQ291bnQpIGFuZCBydW4gb24gdGhpcyB0aGUgJ2JvbGRSZWdleCdcclxuXHQgIC8vIENvdW50IGJvbGQgY2hhcmFjdGVyc1xyXG5cdCAgY29uc3QgbGF5ZXIyU3RyaW5nID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIik7XHJcblx0ICBjb25zdCBib2xkTWF0Y2hlcyA9IGxheWVyMlN0cmluZy5tYXRjaChib2xkUmVnZXgpO1xyXG5cdCAgaWYgKGJvbGRNYXRjaGVzKSB7XHJcblx0ICAgIGJvbGRDb3VudCA9IGJvbGRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGJvbGRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICcqKidcclxuXHQgIH1cclxuXHR9XHJcbiAgXHJcblx0XHJcblx0XHJcbiAgXHJcblx0cmV0dXJuIHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfTtcclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxldmVsT2ZNYXR1cml0eShub3RlTGVuZ3RoOiBudW1iZXIsIGxlbmd0aE9mVGl0bGU6IG51bWJlciwgSW5saW5rczogbnVtYmVyLCBvdXRnb2luZ0xpbmtzOiBudW1iZXIsIHByb2dyZXNzaXZlU3VtTWFqdXJpdHk6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG5vdGVMZW5ndGg6ICR7bm90ZUxlbmd0aH1cXHRsZW5ndGhPZlRpdGxlOiAke2xlbmd0aE9mVGl0bGV9XFx0SW5saW5rczogJHtJbmxpbmtzfVxcdG91dGdvaW5nTGlua3M6ICR7b3V0Z29pbmdMaW5rc31gKVxyXG5cdFxyXG5cdC8vIGRlY2lkZSBpZiBub3RlTGVuZ3RoLW1hanVyaXR5IG9yIHByb2dyZXNzaXZlU3VtLW1hanVyaXR5IHNoYWxsIGJlIHVzZWRcclxuXHR2YXIgbGVuZ3RoTWFqdXJpdHkgPSAwO1xyXG5cdGlmKG5vdGVMZW5ndGggPj0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eSkge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBub3RlTGVuZ3RoO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IHByb2dyZXNzaXZlU3VtTWFqdXJpdHk7XHJcblx0fVxyXG5cdFxyXG5cdGNvbnN0IHRvdGFsV2VpZ2h0IDogbnVtYmVyID0gbGVuZ3RoTWFqdXJpdHkgKyBsZW5ndGhPZlRpdGxlICsgSW5saW5rcyArIG91dGdvaW5nTGlua3M7XHJcblx0Y29uc3QgYXZlcmFnZVdlaWdodCA9IHRvdGFsV2VpZ2h0IC8gNTtcclxuXHQvLyBjb25zb2xlLmxvZyhgdG90YWxXZWlnaHQ6ICR7dG90YWxXZWlnaHR9XFx0YXZlcmFnZVdlaWdodDogJHthdmVyYWdlV2VpZ2h0fWApXHJcblx0aWYgKGF2ZXJhZ2VXZWlnaHQgPCAwLjUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAxKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMikge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzLjUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSA0KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVPdXRsaW5rcyhvdXRsaW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgb3V0bGlua3M6ICR7b3V0bGlua3N9YClcclxuXHRpZiAob3V0bGlua3MgPCAyKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMykge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA5KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMikge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlSW5saW5rcyhudW1JbmxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vdmFyIHByb3plbnRJbmxpbmtzID0gbnVtSW5saW5rcyAqIDEwMCAvIG51bUFsbEZpbGVzO1xyXG5cdC8vY29uc29sZS5sb2coYG51bUlubGlua3M6ICR7bnVtSW5saW5rc31cXHRudW1BbGxGaWxlczogJHtudW1BbGxGaWxlc31cXHRwcm96ZW50SW5saW5rczogJHtwcm96ZW50SW5saW5rc31gKVxyXG5cdC8qaWYgKHByb3plbnRJbmxpbmtzIDwgMC4wMDUgfHwgcHJvemVudElubGlua3MgPiAwLjEpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSAqLyBpZiAobnVtSW5saW5rcyA9PSAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA0KSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA4KSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTYpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA+PSAxNiAmJiBudW1JbmxpbmtzIDwgNTAwICkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlRGlyZWN0aW9uKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCByYXRpbmcgPSBcIlwiXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA+IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwN1x1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDZcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID09IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MjdBMVx1RkUwRlwiXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXCJcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGVuZ3RoRmlsZW5hbWUoZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDMwKSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCA4MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTAwKSB7XHJcblx0cmV0dXJuIDM7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxNTApIHtcclxuXHRyZXR1cm4gNTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE5MCkge1xyXG5cdHJldHVybiA0O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjEwKSB7XHJcblx0cmV0dXJuIDI7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyNTApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2Uge1xyXG5cdHJldHVybiAwO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTm90ZUxlbmd0aChjb250ZW5sZW5ndGg6IG51bWJlcik6IG51bWJlciB7XHJcblx0aWYgKGNvbnRlbmxlbmd0aCA8IDIwMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCA1NTApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTAwMCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMjAwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDIwMDApIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjUwMCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAzMDAwKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWJlck9mT3V0bGlua3MoYWN0aXZlRmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG5cdC8vIGNvbnN0IGFjdGl2ZUZpbGU6IFRGaWxlIHwgbnVsbCA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG5cdGlmICghYWN0aXZlRmlsZSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cdGNvbnN0IGlubGlua3MgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoYWN0aXZlRmlsZSk/LmxpbmtzO1xyXG5cdHJldHVybiBpbmxpbmtzID8gT2JqZWN0LmtleXMoaW5saW5rcykubGVuZ3RoIDogMDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblx0cmV0dXJuIGNoYXJDb3VudDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzX3NpbmdsZShmaWxlX3BhdGg6IHN0cmluZywgdmF1bHRfcGF0aDogc3RyaW5nKTogbnVtYmVyIHtcclxuXHQvLyBHZXQgdGhlIGZpbGVuYW1lIGFuZCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUgd2UncmUgY291bnRpbmcgbGlua3MgdG9cclxuXHRjb25zdCBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZV9wYXRoKTtcclxuXHRjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZmlsZV9wYXRoKTtcclxuXHJcblx0Ly8gQ3JlYXRlIGEgc2V0IHRvIGhvbGQgYWxsIHRoZSBmaWxlcyB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3QgbGlua2luZ19maWxlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcblxyXG5cdC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgZmlsZXMgaW4gdGhlIHZhdWx0IGRpcmVjdG9yeSB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3Qgd2Fsa1N5bmMgPSAoZGlyOiBzdHJpbmcsIGZpbGVsaXN0OiBzdHJpbmdbXSkgPT4ge1xyXG5cdFx0Y29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpO1xyXG5cdFx0ZmlsZWxpc3QgPSBmaWxlbGlzdCB8fCBbXTtcclxuXHRcdGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRpZiAoZnMuc3RhdFN5bmMocGF0aC5qb2luKGRpciwgZmlsZSkpLmlzRGlyZWN0b3J5KCkpIHtcclxuXHRcdFx0XHRmaWxlbGlzdCA9IHdhbGtTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBmaWxlbGlzdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWdub3JlIG5vbi1tZCBmaWxlcyBhbmQgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGlmICghZmlsZS5lbmRzV2l0aChcIi5tZFwiKSB8fCBmaWxlID09PSBmaWxlbmFtZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmVhZCB0aGUgZmlsZSBhbmQgbG9vayBmb3IgbGlua3MgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcclxuXHRcdFx0XHRkYXRhLnNwbGl0KCdcXG4nKS5mb3JFYWNoKChsaW5lOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdGlmIChsaW5lLmluY2x1ZGVzKGBbWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1dYCkgfHwgbGluZS5pbmNsdWRlcyhgWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1gKSkge1xyXG5cdFx0XHRcdFx0XHQvLyBXZSBmb3VuZCBhIGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlIVxyXG5cdFx0XHRcdFx0XHRsaW5raW5nX2ZpbGVzLmFkZChwYXRoLnJlbGF0aXZlKGRpcmVjdG9yeSwgcGF0aC5qb2luKGRpciwgZmlsZSkpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gZmlsZWxpc3Q7XHJcblx0fTtcclxuXHJcblx0d2Fsa1N5bmModmF1bHRfcGF0aCwgW10pO1xyXG5cclxuXHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBhcmUgbWVudGlvbmluZyB0aGUgaW5wdXQgZmlsZVxyXG5cdHJldHVybiBsaW5raW5nX2ZpbGVzLnNpemU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rcyhmaWxlOiBURmlsZSk6IG51bWJlciB7XHJcbiAgICBjb25zdCB7IGFwcDogeyBtZXRhZGF0YUNhY2hlOiB7IHJlc29sdmVkTGlua3MgfSB9IH0gPSB0aGlzO1xyXG4gICAgY29uc3QgeyBwYXRoIH0gPSBmaWxlO1xyXG5cclxuICAgIGNvbnN0IHN1bUlubGlua3MgPSBPYmplY3QudmFsdWVzKHJlc29sdmVkTGlua3MpXHJcbiAgICAgICAgLm1hcCgodmFsOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9KSA9PiB2YWxbcGF0aF0gPz8gMClcclxuICAgICAgICAucmVkdWNlKChsZWZ0LCByaWdodCkgPT4gbGVmdCArIHJpZ2h0LCAwKTtcclxuXHJcbiAgICByZXR1cm4gc3VtSW5saW5rcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlQ291bnRNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+PiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHRcclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdFxyXG5cclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHRcclxuICAgIGNvbnN0IGZpbGVDb3VudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHJcblx0XHRjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG4gICAgICAgIH1cclxuXHRcdFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWxlQ291bnRNYXA7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxURmlsZVtdPiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkU3Vic3RyaW5nczogJHtleGNsdWRlZFN1YnN0cmluZ3N9YClcclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZEZvbGRlcnM6ICR7ZXhjbHVkZWRGb2xkZXJzfWApXHRcclxuICAgIGxldCBmaWxlQXJyYXk6IFRGaWxlW10gPSBbXTtcclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgZmlsZS5wYXRoOiAke2ZpbGUucGF0aH1gKVxyXG5cdFx0aWYgKCghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSB8fCBleGNsdWRlVGFnLmxlbmd0aCA9PT0gMCkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGUgJHtmaWxlfSBnZXQncyBhZGRlZC5gKVxyXG5cdFx0XHRmaWxlQXJyYXkucHVzaChmaWxlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaWxlQXJyYXk7XHJcbn07XHJcbiIsICJpbXBvcnQge1RGaWxlfSBmcm9tICdvYnNpZGlhbic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0Q3JlYXRlZEZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RDcmVhdGVkRmlsZTtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RNb2RpZmllZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RNb2RpZmllZEZpbGUuc3RhdC5tdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdE1vZGlmaWVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdE1vZGlmaWVkRmlsZTtcclxufSAgXHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdERhdGVGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdENyZWF0ZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5jdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vbnRoc0JldHdlZW4oc3RhcnRNb250aDogRGF0ZSwgZW5kTW9udGg6IERhdGUpOiBudW1iZXIge1xyXG5cdGxldCBtb250aHMgPSAoZW5kTW9udGguZ2V0TW9udGgoKSAtIHN0YXJ0TW9udGguZ2V0TW9udGgoKSkgKyAxO1xyXG5cdGlmIChlbmRNb250aC5nZXRGdWxsWWVhcigpID4gc3RhcnRNb250aC5nZXRGdWxsWWVhcigpKSB7XHJcblx0XHRtb250aHMgKz0gKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgLSBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpKjEyO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9udGhzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQuY3RpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQubXRpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhcnRGb3JtYXQoeV9heGlzOiBzdHJpbmcsIGNvdW50c1N0cmluZ01vZDogc3RyaW5nLCBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCBtb25hdHNiZWdyZW56dW5nID0gbnVsbFxyXG5cdGlmIChjaGFydFJlZHV6aWVydW5nTW9uYXRlID09IDApe1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IDBcclxuXHR9IGVsc2Uge1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IGNvdW50c1N0cmluZ01vZC5zcGxpdCgnLCcpLmxlbmd0aCAtIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHR9XHJcblx0XHJcblx0Ly9jb25zdCBtb25hdHNiZWdyZW56dW5nID0gbGVuZ3RoY291bnRzU3RyaW5nQ3JlYXRlIC0gdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlXHJcblx0cmV0dXJuIFwiYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtcIiArIHlfYXhpcyArIFwiXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IG1vZGlmaWVkXFxuICAgIGRhdGE6IFtcIiArIGNvdW50c1N0cmluZ01vZCArIFwiXVxcbnRlbnNpb246IDAuMlxcbndpZHRoOiA4MCAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG55VGl0bGU6IFxcXCJOdW1iZXIgb2YgTm90ZXNcXFwiXFxueFRpdGxlOiBcXFwiTW9udGhzXFxcIlxcbnhNaW46IFwiICsgbW9uYXRzYmVncmVuenVuZyArIFwiXFxuYGBgXCI7XHJcbn1cclxuXHJcbiAgXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQ2hhcnRDb250ZW50IChhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBuZXdDb250ZW50OiBzdHJpbmcpIHtcclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRpZiAobGluZSA9PT0gXCJeQ2hhcnRNb250aFwiKSB7XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmIChyZWZlcmVuY2UgIT0gbnVsbCl7XHJcblx0XHRlbmQgPSByZWZlcmVuY2U7XHJcblx0XHRzdGFydCA9IHJlZmVyZW5jZSAtIDE5O1xyXG5cdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdDb250ZW50LCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIGxldmVsOiBzdHJpbmc7XHJcbiAgfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSWZSZWNlaXZlQUJhZGdlKGxldmVsT2xkOiBudW1iZXIsIGxldmVsTmV3OiBudW1iZXIpOiBib29sZWFuIHtcclxuICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgbGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcbiAgZm9yIChsZXQgaT0wOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspe1xyXG4gICAgaWYgKGxldmVsT2xkIDwgYmFkZ2VMZXZlbHNbaV0gJiYgbGV2ZWxOZXcgPj0gYmFkZ2VMZXZlbHNbaV0pe1xyXG4gICAgICByZWNlaXZlQmFkZ2UgPSB0cnVlXHJcbiAgICB9IFxyXG4gIH1cclxuICByZXR1cm4gcmVjZWl2ZUJhZGdlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIsIGluZm9ybTogYm9vbGVhbik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiLCBsZXZlbDogXCJsZXZlbCA1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgLCBsZXZlbDogXCJsZXZlbCAyMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZSBPd2wgR3VydVwiLCBkZXNjcmlwdGlvbjogXCJXaG9vLWhvbyEgWW91J3ZlIGFjaGlldmVkICdXaXNlIE93bCBHdXJ1JyBzdGF0dXMuIFlvdXIgd2lzZG9tIGlzIGxlZ2VuZGFyeSwgYW5kIHlvdXIgaG9vdHMgb2Yga25vd2xlZGdlIGVjaG8gdGhyb3VnaCB0aGUgZm9yZXN0IG9mIGlnbm9yYW5jZSFcIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVpbnN0ZWluIEluY2FybmF0ZVwiLCBkZXNjcmlwdGlvbjogXCJFdXJla2EhIFlvdSd2ZSBiZWNvbWUgYW4gJ0VpbnN0ZWluIEluY2FybmF0ZSwnIHB1c2hpbmcgdGhlIGJvdW5kYXJpZXMgb2YgdW5kZXJzdGFuZGluZyBhbmQgYmVuZGluZyB0aGUgZmFicmljIG9mIGtub3dsZWRnZSB0byB5b3VyIHdpbGwhXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJNYXN0ZXJtaW5kIFNhZ2VcIiwgZGVzY3JpcHRpb246IFwiTWFnbmlmaWNlbnQhIFlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgcmFuayBvZiAnTWFzdGVybWluZCBTYWdlLCcgZ3VpZGluZyB0aGUgcml2ZXJzIG9mIGluZm9ybWF0aW9uIGFuZCBlbmxpZ2h0ZW5pbmcgYWxsIHdobyBzZWVrIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNlcmVicmFsIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQnJhdmlzc2ltbyEgWW91J3JlIG5vdyBhICdDZXJlYnJhbCBNYWVzdHJvLCcgY29uZHVjdGluZyB0aGUgc3ltcGhvbnkgb2Yga25vd2xlZGdlIHdpdGggdGhlIGZpbmVzc2Ugb2YgYSB2aXJ0dW9zbyBjb25kdWN0b3IhXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJaZW4gS25vd2xlZGdlIEtlZXBlclwiLCBkZXNjcmlwdGlvbjogXCJTZXJlbml0eSBhY2hpZXZlZCEgQXMgYSAnWmVuIEtub3dsZWRnZSBLZWVwZXIsJyB5b3UgbWFpbnRhaW4gYSB0cmFucXVpbCBtaW5kIHdoaWxlIG1hbmFnaW5nIHZhc3QgcG9vbHMgb2Yga25vd2xlZGdlIHdpdGggZ3JhY2UgYW5kIHBvaXNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkXCIsIGRlc2NyaXB0aW9uOiBcIkFsbCBoYWlsIHRoZSAnR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkIScgWW91IHdpZWxkIHRoZSBrbm93bGVkZ2Ugb2YgYWdlcyBhbmQgaG9sZCB0aGUga2V5cyB0byB1bmxvY2sgdGhlIGdhdGVzIG9mIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nXCIsIGRlc2NyaXB0aW9uOiBcIkNvbmdyYXR1bGF0aW9ucywgb2ggd2lzZSBvbmUhIFlvdSd2ZSBhdHRhaW5lZCB0aGUgaGlnaGVzdCBsZXZlbCBvZiBlbmxpZ2h0ZW5tZW50IGFzIHRoZSAnT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcuJyBZb3VyIHVuZGVyc3RhbmRpbmcga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciB3aXNkb20gaXMgYXMgdmFzdCBhcyB0aGUgY29zbW9zIGl0c2VsZiFcIiwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc1tpbmRleF1cclxuICB9XHJcbiAgXHJcblxyXG5cclxuICBleHBvcnQgIGZ1bmN0aW9uIGdldEJhZGdlRm9ySW5pdExldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbMCwgMywgNywgMTUsIDIzLCAzMCwgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzSW5pdDogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgU2Vla2VyIEluaXRpYXRlXCIsIGRlc2NyaXB0aW9uOiBcIldlbGNvbWUgdG8gdGhlIGpvdXJuZXkgb2Yga25vd2xlZGdlISBBcyBhICdMb3JlIFNlZWtlciBJbml0aWF0ZSwnIHlvdSd2ZSB0YWtlbiB5b3VyIGZpcnN0IHN0ZXBzIGludG8gdGhlIHdvcmxkIG9mIG9yZ2FuaXplZCB3aXNkb20uIFlvdXIgcXVlc3QgaGFzIGp1c3QgYmVndW4sIGFuZCB3aXRoIGVhY2ggbm90ZSB5b3UgbWFrZSwgeW91IGxheSB0aGUgZm91bmRhdGlvbiBmb3IgYSBmdXR1cmUgcmljaCB3aXRoIGluc2lnaHRzIGFuZCB1bmRlcnN0YW5kaW5nLiBZb3VyIGpvdXJuZXkgc3RhcnRzIGhlcmUsIGFuZCB0aGUgcGF0aCBhaGVhZCBpcyBmaWxsZWQgd2l0aCBwb3RlbnRpYWwgYW5kIGRpc2NvdmVyeS5cIiwgbGV2ZWw6IFwibGV2ZWwgMVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEFwcHJlbnRpY2VcIiwgZGVzY3JpcHRpb246IFwiWW91J3ZlIGhpdCB0aGUgZ3JvdW5kIHJ1bm5pbmcgd2l0aCB5b3VyIGV4aXN0aW5nIGtub3dsZWRnZSB0cmVhc3VyZXMhIFlvdSdyZSBhbHJlYWR5IGFuICdMb3JlIEFwcHJlbnRpY2UsJyBhcm1lZCB3aXRoIGEgd2VhbHRoIG9mIHdpc2RvbSBhbmQgcmVhZHkgdG8gc2hhcGUgaXQgZnVydGhlci5cIiwgbGV2ZWw6IFwibGV2ZWwgM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYXZ2eSBTY2hvbGFyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBnaXZlbiB5b3UgYSBoZWFkIHN0YXJ0ISBZb3UncmUgbm93IGEgJ1NhdnZ5IFNjaG9sYXIsJyBjb25maWRlbnRseSBkaXZpbmcgaW50byB0aGUgc2VhIG9mIGluZm9ybWF0aW9uIHdpdGggYSB0cmVhc3VyZSB0cm92ZSBvZiBpbnNpZ2h0cy5cIiAsIGxldmVsOiBcImxldmVsIDdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2FnZSdzIEZvdW5kYXRpb25cIiwgZGVzY3JpcHRpb246IFwiQnVpbGRpbmcgdXBvbiB5b3VyIHByZS1leGlzdGluZyBub3RlcywgeW91J3JlIGVzdGFibGlzaGluZyB0aGUgJ1NhZ2UncyBGb3VuZGF0aW9uJyBmb3IgYW4gZXZlbiBncmFuZGVyIGVkaWZpY2Ugb2Yga25vd2xlZGdlLiBZb3VyIGdyb3VuZHdvcmsgaXMgaW1wcmVzc2l2ZSFcIiAsIGxldmVsOiBcImxldmVsIDE1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2RvbSBTZWVkbGluZ1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbnVydHVyZWQgdGhlIGdyb3d0aCBvZiBhICdXaXNkb20gU2VlZGxpbmcuJyBZb3UncmUgY3VsdGl2YXRpbmcgeW91ciBnYXJkZW4gb2Yga25vd2xlZGdlIHdpdGggY2FyZSBhbmQgcGF0aWVuY2UuXCIgLCBsZXZlbDogXCJsZXZlbCAyM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJQcm9kaWdpb3VzIFByZXBhcmVyXCIsIGRlc2NyaXB0aW9uOiBcIlRoYW5rcyB0byB5b3VyIHByaW9yIGVmZm9ydHMsIHlvdSdyZSBhICdQcm9kaWdpb3VzIFByZXBhcmVyLCcgc3RhbmRpbmcgdGFsbCBhbW9uZyB5b3VyIG5vdGVzIGFuZCByZWFkeSB0byBjb25xdWVyIG5ldyByZWFsbXMgb2YgdW5kZXJzdGFuZGluZy5cIiAsIGxldmVsOiBcImxldmVsIDMwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVwaWMgRXBpcGhhbnkgRXhwbG9yZXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBwYXN0IG5vdGVzIGhhdmUgbGVkIHlvdSB0byB0aGUgZ3JhbmQgJ0VwaWMgRXBpcGhhbnkgRXhwbG9yZXInIHN0YXR1cyEgWW91J3ZlIGFscmVhZHkgYmVlbiBkb3duIGEgZmV3IHJhYmJpdCBob2xlcyBhbmQgY29tZSBvdXQgd2l0aCBkYXp6bGluZyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgTHVtaW5hcnlcIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIGlsbHVtaW5hdGluZyB5b3VyIHBhdGgsIHlvdSd2ZSBiZWNvbWUgYSAnTG9yZSBMdW1pbmFyeSwnIHNoaW5pbmcgbGlnaHQgb24gdGhlIG15c3RlcmllcyBvZiB0aGUgdW5pdmVyc2UsIG9uZSBpZGVhIGF0IGEgdGltZS5cIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjcmliZSBvZiB0aGUgQW5jaWVudHNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBtYXN0ZXJ5IG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYW5hZ2VtZW50IGhhcyBlbGV2YXRlZCB5b3UgdG8gdGhlIGVzdGVlbWVkIHJhbmsgb2YgdGhlICdTY3JpYmUgb2YgdGhlIEFuY2llbnRzLicgWW91ciBleGlzdGluZyBub3RlcyBoYXZlIHRyYW5zZm9ybWVkIGludG8gdHJlYXN1cmVzLCBicmlkZ2luZyB0aGUgZ2FwIGJldHdlZW4gb2xkIHdpc2RvbSBhbmQgbmV3IGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXVyZWthIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQXJtZWQgd2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzLCB5b3UncmUgdGhlICdFdXJla2EgTWFlc3RybywnIGNvbXBvc2luZyBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHdpdGggdGhlIG1lbG9keSBvZiBkaXNjb3ZlcnkuXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDaHJvbmljbGVzIENoYW1waW9uXCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBzdGFuZGluZyBhcyBhIHRlc3RhbWVudCwgeW91J3ZlIGFzY2VuZGVkIHRvIHRoZSBpbGx1c3RyaW91cyAnQ2hyb25pY2xlcyBDaGFtcGlvbicgbGV2ZWwuIFlvdXIgam91cm5leSB0aHJvdWdoIHRpbWUncyB0YXBlc3RyeSBoYXMgYnJvdWdodCBmb3J0aCBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHBhc3QgYW5kIHByZXNlbnQuXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXJcIiwgZGVzY3JpcHRpb246IFwiQXMgJ1RoZSBDdXJpb3VzIENhcnRvZ3JhcGhlciwnIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYXBwZWQgb3V0IHVuY2hhcnRlZCB0ZXJyaXRvcmllcyBvZiB1bmRlcnN0YW5kaW5nLiBZb3VyIGN1cmlvc2l0eSBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIG5vdGVzIGFyZSB0aGUgY29tcGFzcyBndWlkaW5nIHlvdXIgZXhwbG9yYXRpb24uXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTdWx0YW4gb2YgU3ludGhlc2lzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYWRlIHlvdSB0aGUgJ1N1bHRhbiBvZiBTeW50aGVzaXMuJyBZb3UncmUgdGhlIG1hc3RlciB3ZWF2ZXIsIHRocmVhZGluZyB0b2dldGhlciB0aHJlYWRzIG9mIGluZm9ybWF0aW9uIGludG8gYSByaWNoIHRhcGVzdHJ5IG9mIGluc2lnaHQuXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdGVybmFsIEFyY2hpdmlzdFwiLCBkZXNjcmlwdGlvbjogXCJBdCB0aGUgcGlubmFjbGUgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hc3RlcnksIHlvdSdyZSBub3cgcmV2ZXJlZCBhcyB0aGUgJ0V0ZXJuYWwgQXJjaGl2aXN0LicgWW91ciBleGlzdGluZyBub3RlcywgY2FyZWZ1bGx5IGN1cmF0ZWQgYW5kIG51cnR1cmVkLCBzdGFuZCBhcyBpbW1vcnRhbCBiZWFjb25zLCBndWlkaW5nIHNlZWtlcnMgdGhyb3VnaCB0aGUgbGFieXJpbnRoIG9mIGtub3dsZWRnZSBhY3Jvc3MgYWdlcy5cIiAsIGxldmVsOiBcImxldmVsIDEwMFwiIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc0luaXRbaW5kZXhdXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRXhhbXBsZSB1c2FnZTpcclxuICAvLyBjb25zdCBjdXJyZW50TGV2ZWwgPSA0MjsgLy8gUmVwbGFjZSB0aGlzIHdpdGggdGhlIGFjdHVhbCBwbGF5ZXIncyBsZXZlbFxyXG4gIC8vIGNvbnN0IGJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChjdXJyZW50TGV2ZWwpO1xyXG4gIC8vIGNvbnNvbGUubG9nKGBDb25ncmF0dWxhdGlvbnMhIFlvdSd2ZSByZWFjaGVkIExldmVsICR7Y3VycmVudExldmVsfS4gWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YCk7XHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4gICAgLypcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiIH0sXHJcbiAgICAgIC8vIEFkZCBtb3JlIGJhZGdlcyBoZXJlIGZvciBsZXZlbHMgNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIGFuZCAxMDBcclxuICAgICAgLy8gRXhhbXBsZTpcclxuICAgICAgLy8geyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgfSxcclxuICAgICAgLy8geyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiB9LFxyXG4gICAgICAvLyAuLi5hbmQgc28gb25cclxuICAgIF07XHJcbiAgXHJcbiAgICBjb25zdCBtYXhMZXZlbCA9MTAwOyAvLyBBc3N1bWluZyBlYWNoIGJhZGdlIGlzIGF3YXJkZWQgZXZlcnkgNSBsZXZlbHNcclxuICAgIGNvbnN0IGNhcHBlZExldmVsID0gTWF0aC5taW4obGV2ZWwsIG1heExldmVsKTtcclxuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihjYXBwZWRMZXZlbCAvIDUpIC0gMTtcclxuICAgIHJldHVybiBiYWRnZXNbaW5kZXhdO1xyXG4gIH1cclxuICBcclxuXHJcbiAgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgfVxyXG4gICovXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIExldmVsRGF0YSB7XHJcbiAgICBwb2ludHM6IG51bWJlcjtcclxuICAgIGxldmVsOiBudW1iZXI7XHJcbiAgICBwb2ludHNOZXh0OiBudW1iZXI7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbnN0IGxldmVsRGF0YTogTGV2ZWxEYXRhW10gPSBbXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDAsIHBvaW50c05leHQ6IDB9LFxyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAxLCBwb2ludHNOZXh0OiAxMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMCwgbGV2ZWw6IDIsIHBvaW50c05leHQ6IDMwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwLCBsZXZlbDogMywgcG9pbnRzTmV4dDogNzUwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAsIGxldmVsOiA0LCBwb2ludHNOZXh0OiAxNTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MDAwLCBsZXZlbDogNSwgcG9pbnRzTmV4dDogMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMCwgbGV2ZWw6IDYsIHBvaW50c05leHQ6IDUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTAwMDAsIGxldmVsOiA3LCBwb2ludHNOZXh0OiA4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgwMDAwLCBsZXZlbDogOCwgcG9pbnRzTmV4dDogMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIwMDAwLCBsZXZlbDogOSwgcG9pbnRzTmV4dDogMTcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTcwMDAwLCBsZXZlbDogMTAsIHBvaW50c05leHQ6IDIzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMDAwMCwgbGV2ZWw6IDExLCBwb2ludHNOZXh0OiAzMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAsIGxldmVsOiAxMiwgcG9pbnRzTmV4dDogMzgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzgwMDAwLCBsZXZlbDogMTMsIHBvaW50c05leHQ6IDQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3MDAwMCwgbGV2ZWw6IDE0LCBwb2ludHNOZXh0OiA2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDAwMDAsIGxldmVsOiAxNSwgcG9pbnRzTmV4dDogNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMDAwLCBsZXZlbDogMTYsIHBvaW50c05leHQ6IDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMDAwMCwgbGV2ZWw6IDE3LCBwb2ludHNOZXh0OiAxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTExMDAwMCwgbGV2ZWw6IDE4LCBwb2ludHNOZXh0OiAxMzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMyMDAwMCwgbGV2ZWw6IDE5LCBwb2ludHNOZXh0OiAxNTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTU1MDAwMCwgbGV2ZWw6IDIwLCBwb2ludHNOZXh0OiAxODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTgwMDAwMCwgbGV2ZWw6IDIxLCBwb2ludHNOZXh0OiAyMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjA3MDAwMCwgbGV2ZWw6IDIyLCBwb2ludHNOZXh0OiAyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjM2MDAwMCwgbGV2ZWw6IDIzLCBwb2ludHNOZXh0OiAyNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjY3MDAwMCwgbGV2ZWw6IDI0LCBwb2ludHNOZXh0OiAzMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwMCwgbGV2ZWw6IDI1LCBwb2ludHNOZXh0OiAzMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM1MDAwMCwgbGV2ZWw6IDI2LCBwb2ludHNOZXh0OiAzNzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzcyMDAwMCwgbGV2ZWw6IDI3LCBwb2ludHNOZXh0OiA0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDExMDAwMCwgbGV2ZWw6IDI4LCBwb2ludHNOZXh0OiA0NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUyMDAwMCwgbGV2ZWw6IDI5LCBwb2ludHNOZXh0OiA0OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDk1MDAwMCwgbGV2ZWw6IDMwLCBwb2ludHNOZXh0OiA1NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQwMDAwMCwgbGV2ZWw6IDMxLCBwb2ludHNOZXh0OiA1ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTg3MDAwMCwgbGV2ZWw6IDMyLCBwb2ludHNOZXh0OiA2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjM2MDAwMCwgbGV2ZWw6IDMzLCBwb2ludHNOZXh0OiA2ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjg3MDAwMCwgbGV2ZWw6IDM0LCBwb2ludHNOZXh0OiA3NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwMDAwMCwgbGV2ZWw6IDM1LCBwb2ludHNOZXh0OiA3OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzk1MDAwMCwgbGV2ZWw6IDM2LCBwb2ludHNOZXh0OiA4NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODUyMDAwMCwgbGV2ZWw6IDM3LCBwb2ludHNOZXh0OiA5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTExMDAwMCwgbGV2ZWw6IDM4LCBwb2ludHNOZXh0OiA5NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTcyMDAwMCwgbGV2ZWw6IDM5LCBwb2ludHNOZXh0OiAxMDM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMzUwMDAwLCBsZXZlbDogNDAsIHBvaW50c05leHQ6IDExMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTEwMDAwMDAsIGxldmVsOiA0MSwgcG9pbnRzTmV4dDogMTE2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTY3MDAwMCwgbGV2ZWw6IDQyLCBwb2ludHNOZXh0OiAxMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMzYwMDAwLCBsZXZlbDogNDMsIHBvaW50c05leHQ6IDEzMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMwNzAwMDAsIGxldmVsOiA0NCwgcG9pbnRzTmV4dDogMTM4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzgwMDAwMCwgbGV2ZWw6IDQ1LCBwb2ludHNOZXh0OiAxNDU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE0NTUwMDAwLCBsZXZlbDogNDYsIHBvaW50c05leHQ6IDE1MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUzMjAwMDAsIGxldmVsOiA0NywgcG9pbnRzTmV4dDogMTYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjExMDAwMCwgbGV2ZWw6IDQ4LCBwb2ludHNOZXh0OiAxNjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2OTIwMDAwLCBsZXZlbDogNDksIHBvaW50c05leHQ6IDE3NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTc3NTAwMDAsIGxldmVsOiA1MCwgcG9pbnRzTmV4dDogMTg2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODYwMDAwMCwgbGV2ZWw6IDUxLCBwb2ludHNOZXh0OiAxOTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE5NDcwMDAwLCBsZXZlbDogNTIsIHBvaW50c05leHQ6IDIwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjAzNjAwMDAsIGxldmVsOiA1MywgcG9pbnRzTmV4dDogMjEyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMTI3MDAwMCwgbGV2ZWw6IDU0LCBwb2ludHNOZXh0OiAyMjIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIyMjAwMDAwLCBsZXZlbDogNTUsIHBvaW50c05leHQ6IDIzMTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMxNTAwMDAsIGxldmVsOiA1NiwgcG9pbnRzTmV4dDogMjQxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNDEyMDAwMCwgbGV2ZWw6IDU3LCBwb2ludHNOZXh0OiAyNTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI1MTEwMDAwLCBsZXZlbDogNTgsIHBvaW50c05leHQ6IDI2MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjYxMjAwMDAsIGxldmVsOiA1OSwgcG9pbnRzTmV4dDogMjcxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNzE1MDAwMCwgbGV2ZWw6IDYwLCBwb2ludHNOZXh0OiAyODIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI4MjAwMDAwLCBsZXZlbDogNjEsIHBvaW50c05leHQ6IDI5MjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjkyNzAwMDAsIGxldmVsOiA2MiwgcG9pbnRzTmV4dDogMzAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDM2MDAwMCwgbGV2ZWw6IDYzLCBwb2ludHNOZXh0OiAzMTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMxNDcwMDAwLCBsZXZlbDogNjQsIHBvaW50c05leHQ6IDMyNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzI2MDAwMDAsIGxldmVsOiA2NSwgcG9pbnRzTmV4dDogMzM3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzc1MDAwMCwgbGV2ZWw6IDY2LCBwb2ludHNOZXh0OiAzNDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM0OTIwMDAwLCBsZXZlbDogNjcsIHBvaW50c05leHQ6IDM2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzYxMTAwMDAsIGxldmVsOiA2OCwgcG9pbnRzTmV4dDogMzczMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzMyMDAwMCwgbGV2ZWw6IDY5LCBwb2ludHNOZXh0OiAzODU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4NTUwMDAwLCBsZXZlbDogNzAsIHBvaW50c05leHQ6IDM5ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzk4MDAwMDAsIGxldmVsOiA3MSwgcG9pbnRzTmV4dDogNDEwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTA3MDAwMCwgbGV2ZWw6IDcyLCBwb2ludHNOZXh0OiA0MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQyMzYwMDAwLCBsZXZlbDogNzMsIHBvaW50c05leHQ6IDQzNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDM2NzAwMDAsIGxldmVsOiA3NCwgcG9pbnRzTmV4dDogNDUwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTAwMDAwMCwgbGV2ZWw6IDc1LCBwb2ludHNOZXh0OiA0NjM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ2MzUwMDAwLCBsZXZlbDogNzYsIHBvaW50c05leHQ6IDQ3NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDc3MjAwMDAsIGxldmVsOiA3NywgcG9pbnRzTmV4dDogNDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTExMDAwMCwgbGV2ZWw6IDc4LCBwb2ludHNOZXh0OiA1MDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwNTIwMDAwLCBsZXZlbDogNzksIHBvaW50c05leHQ6IDUxOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTE5NTAwMDAsIGxldmVsOiA4MCwgcG9pbnRzTmV4dDogNTM0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MzQwMDAwMCwgbGV2ZWw6IDgxLCBwb2ludHNOZXh0OiA1NDg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0ODcwMDAwLCBsZXZlbDogODIsIHBvaW50c05leHQ6IDU2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTYzNjAwMDAsIGxldmVsOiA4MywgcG9pbnRzTmV4dDogNTc4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1Nzg3MDAwMCwgbGV2ZWw6IDg0LCBwb2ludHNOZXh0OiA1OTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU5NDAwMDAwLCBsZXZlbDogODUsIHBvaW50c05leHQ6IDYwOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjA5NTAwMDAsIGxldmVsOiA4NiwgcG9pbnRzTmV4dDogNjI1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MjUyMDAwMCwgbGV2ZWw6IDg3LCBwb2ludHNOZXh0OiA2NDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY0MTEwMDAwLCBsZXZlbDogODgsIHBvaW50c05leHQ6IDY1NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjU3MjAwMDAsIGxldmVsOiA4OSwgcG9pbnRzTmV4dDogNjczNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NzM1MDAwMCwgbGV2ZWw6IDkwLCBwb2ludHNOZXh0OiA2OTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY5MDAwMDAwLCBsZXZlbDogOTEsIHBvaW50c05leHQ6IDcwNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzA2NzAwMDAsIGxldmVsOiA5MiwgcG9pbnRzTmV4dDogNzIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MjM2MDAwMCwgbGV2ZWw6IDkzLCBwb2ludHNOZXh0OiA3NDA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDcwMDAwLCBsZXZlbDogOTQsIHBvaW50c05leHQ6IDc1ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzU4MDAwMDAsIGxldmVsOiA5NSwgcG9pbnRzTmV4dDogNzc1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NzU1MDAwMCwgbGV2ZWw6IDk2LCBwb2ludHNOZXh0OiA3OTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5MzIwMDAwLCBsZXZlbDogOTcsIHBvaW50c05leHQ6IDgxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODExMTAwMDAsIGxldmVsOiA5OCwgcG9pbnRzTmV4dDogODI5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MjkyMDAwMCwgbGV2ZWw6IDk5LCBwb2ludHNOZXh0OiA4NDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg0NzUwMDAwLCBsZXZlbDogMTAwLCBwb2ludHNOZXh0OiA4NjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg2NjAwMDAwLCBsZXZlbDogMTAxLCBwb2ludHNOZXh0OiA4ODQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg4NDcwMDAwLCBsZXZlbDogMTAyLCBwb2ludHNOZXh0OiA5MDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkwMzYwMDAwLCBsZXZlbDogMTAzLCBwb2ludHNOZXh0OiA5MjI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMjcwMDAwLCBsZXZlbDogMTA0LCBwb2ludHNOZXh0OiA5NDIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk0MjAwMDAwLCBsZXZlbDogMTA1LCBwb2ludHNOZXh0OiA5NjE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk2MTUwMDAwLCBsZXZlbDogMTA2LCBwb2ludHNOZXh0OiA5ODEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk4MTIwMDAwLCBsZXZlbDogMTA3LCBwb2ludHNOZXh0OiAxMDAxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAxMTAwMDAsIGxldmVsOiAxMDgsIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMjEyMDAwMCwgbGV2ZWw6IDEwOSwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTA0MTUwMDAwLCBsZXZlbDogMTEwLCBwb2ludHNOZXh0OiAxMDYxNTAwMDAgfSxcclxuICBdO1xyXG4gIFxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRMZXZlbEZvclBvaW50cyhwb2ludHM6IG51bWJlcik6IExldmVsRGF0YSB7XHJcbiAgICBsZXQgbGV2ZWwgOkxldmVsRGF0YSA9IGxldmVsRGF0YVswXTtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHBvaW50cyA+PSBkYXRhLnBvaW50cykge1xyXG4gICAgICAgIGxldmVsID0gZGF0YTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxldmVsO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c1BvaW50c0ZvckxldmVsKHRhcmdldExldmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHN0YXR1c1BvaW50cyA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmICh0YXJnZXRMZXZlbCA9PSBkYXRhLmxldmVsICYmIHN0YXR1c1BvaW50cyA9PSAwKSB7XHJcbiAgICAgICAgc3RhdHVzUG9pbnRzID0gZGF0YS5wb2ludHM7XHJcbiAgICAgIH0gXHJcbiAgICB9XHJcblxyXG5cdFx0XHJcblx0XHRyZXR1cm4gc3RhdHVzUG9pbnRzXHJcbiAgfVxyXG4gIFxyXG5cclxuLypcclxuY29uc3QgcG9pbnRzID0gNTUwMDtcclxuY29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhwb2ludHMpO1xyXG5jb25zb2xlLmxvZyhgV2l0aCAke3BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsfS5gKTtcclxuKi8iLCAiY29uc3QgbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2U6IHN0cmluZ1tdID0gW1xyXG5cdFwiU2V2ZW4gZGF5cyBvZiBub3RlLXRha2luZz8gWW91J3JlIHByYWN0aWNhbGx5IGEgbm90ZSBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBmaWVzdGEhIFx1RDgzQ1x1REY4OVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBwYXJ0eSBnb2luZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0gWW91J3JlIGxpa2UgdGhlIEphbWVzIEJvbmQgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REQ3Nlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzZWNyZXQgYWdlbnQhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhICdOb3RlLUEtRGF5JyBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXBlcyBvcHRpb25hbCFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3ZlIHByYWN0aWNhbGx5IHdyaXR0ZW4gYSBtaW5pIG5vdmVsIGJ5IG5vdyEgXHVEODNEXHVEQ0RBXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGF1dGhvciBzdGF0dXMgYWNoaWV2ZWQhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFVzYWluIEJvbHQgb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzcHJpbnRpbmcgdG93YXJkcyBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc3ByZWUhIEl0J3MgbGlrZSBhIG5vdGVzLXBsb3Npb24hIFx1RDgzRFx1RENBNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBmaXJld29ya3MgY29taW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYmFzaWNhbGx5IHRoZSBNaWNoYWVsIEpvcmRhbiBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNsYW0gZHVuayFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNVlAhIFx1RDgzQ1x1REZDNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNjb3JpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgJ1NldmVuIERheSBOb3RlIEZldmVyJyBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhdGNoIHRoZSBmZXZlciFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGphbW1pbichXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgbWFnaWMgc2hvdyEgTm93IHlvdSBzZWUgdGhlIG5vdGVzLCBub3cgeW91IGRvbid0ISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cywga2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBsaWtlIGEgbm90ZS10YWtpbmcgSmVkaSBNYXN0ZXIhIFx1RDgzQ1x1REYwQ1x1MjY5NFx1RkUwRiBbWF0gcG9pbnRzLCBtYXkgdGhlIG5vdGVzIGJlIHdpdGggeW91IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNYWNHeXZlciwgdHVybmluZyBpbmZvcm1hdGlvbiBpbnRvIHNvbHV0aW9ucyEgXHVEODNEXHVERDI3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY3JhZnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBjaGVmLCBjb29raW5nIHVwIGEga25vd2xlZGdlIGZlYXN0ISBcdUQ4M0NcdURGNzNcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjb29raW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQwXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTGV3aXMgYW5kIENsYXJrLCBjaGFydGluZyBuZXcgdGVycml0b3JpZXMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURERkFcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGRldGVjdGl2ZSwgc29sdmluZyBjYXNlcyBvZiBjdXJpb3NpdHkhIFx1RDgzRFx1REQ3NVx1RkUwRlx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGRldGVjdGluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHBpb25lZXIsIGJsYXppbmcgdHJhaWxzIHRocm91Z2ggdGhlIGZvcmVzdHMgb2YgaW5mb3JtYXRpb24hIFx1RDgzQ1x1REYzMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBpb25lZXJpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCJcclxuXTtcclxuXHJcbmNvbnN0IHR3b05vdGVNZXNzYWdlczogc3RyaW5nW10gPSBbXHJcblx0XCJCb29tISBZb3UganVzdCBhY2VkIHRoZSAyLW5vdGUgdGFuZ28hIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgZ3Jvb3ZpbichXCIsXHJcblx0XCJUd28gbm90ZXMgaW4gYSBkYXk/IFlvdSdyZSBvZmZpY2lhbGx5IGEgTm90ZSBOaW5qYSEgXHVEODNFXHVERDRCIFtYXSBwb2ludHMgZWFybmVkLiBSb2NrIG9uIVwiLFxyXG5cdFwiSGlnaC1maXZlISBZb3UndmUgY29ucXVlcmVkIHRoZSAyLW5vdGUgcm9kZW8hIFx1RDgzRVx1REQyMCBbWF0gcG9pbnRzIGVhcm5lZC4gWWVlaGF3IVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUhIFR3byBub3RlcyBpbiBvbmUgZGF5LCB5b3UgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgVHdvIG5vdGVzIGluIGEgZGF5IC0gd2hhdCdzIHlvdXIgc2VjcmV0IHdlYXBvbj8gXHVEODNEXHVERDI1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJLYWJvb20hIFlvdSBqdXN0IGJsZXcgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSB3YXRlciEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhIDItbm90ZSBzdXBlcnN0YXIhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGluIHRoZSBiYWcuIEtlZXAgc2hpbmluZyFcIixcclxuXHRcIkRvdWJsZSB1cCwgZG91YmxlIGRvd24hIFR3byBub3RlcyBpbiBvbmUgZGF5IC0geW91J3JlIGEgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgcGFydHkhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiS2EtY2hpbmchIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIHJhY2tpbmcgdXAgdGhvc2UgcG9pbnRzISBcdUQ4M0RcdURDQjAgW1hdIGVhcm5lZCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWdpY2lhbiEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHRyaWNrP1wiLFxyXG5cdFwiVHdvIG5vdGVzPyBOYWlsZWQgaXQhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCBnb2luZyFcIixcclxuXHRcIkFicmEtY2FkYWJyYSEgVHdvIG5vdGVzIGFwcGVhciEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlLCBkb3VibGUgdGhlIGZ1biEgVHdvIG5vdGVzIGluIG9uZSBkYXkhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgZmllc3RhISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYXBvdyEgVHdvIG5vdGVzIGluIGEgZGF5IC0geW91J3JlIGEgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEYgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBhZHZlbnR1cmU/XCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCJcclxuXTtcclxuXHJcbmNvbnN0IHJhbmRvbVBvaW50Tm90aWNlczogc3RyaW5nW10gPSBbXHJcblx0XCJCYXppbmdhISBZb3UganVzdCBzbmFnZ2VkIFtYXSBwb2ludHMhXCIsXHJcblx0XCJLYWJvb20hIFtYXSBwb2ludHMgYXJlIG5vdyBpbiB5b3VyIHBvY2tldCFcIixcclxuXHRcIldvb2hvbyEgW1hdIHBvaW50cyBlYXJuZWQhIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJQb2ludHMgYWhveSEgW1hdIG1vcmUgaW4gdGhlIGJhbmshXCIsXHJcblx0XCJTY29yZSEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHRvdGFsIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlppcHBpdHktemFwISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJDaGFtcGlvbiBtb3ZlISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIkJpbmdvISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIlNoYXphbSEgW1hdIHBvaW50cyB0byB0aGUgcmVzY3VlIVwiLFxyXG5cdFwiS2EtY2hpbmchIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkJyYXZvISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJXZWxsIGRvbmUhIFtYXSBtb3JlIHBvaW50cyBpbiB0b3chXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMsIGp1c3QgbGlrZSB0aGF0IVwiLFxyXG5cdFwiQSByb3VuZCBvZiBhcHBsYXVzZSBmb3IgW1hdIHBvaW50cyFcIixcclxuXHRcIldob29zaCEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJXb28hIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJHcmVhdCBqb2IhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiRmFudGFzdGljISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJIb29yYXkhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiTmljZSBvbmUhIFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldCFcIixcclxuXHRcIldvb3Qgd29vdCEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQmFtISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJDb29sIGJlYW5zISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIlNwbGVuZGlkISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJNYXJ2ZWxvdXMhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFueSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiRXhxdWlzaXRlISBbWF0gcG9pbnRzIGluIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJPdXRzdGFuZGluZyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugam9iIVwiLFxyXG5cdFwiTWFnbmlmaWNlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJUZXJyaWZpYyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiRXhjZWxsZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJBd2Vzb21lISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJXZWxsIHBsYXllZCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIkltcHJlc3NpdmUhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCcmlsbGlhbnQhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk5pY2UgbW92ZSEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiU3RlbGxhciEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJXZWxsIGRlc2VydmVkISBbWF0gcG9pbnRzIGVhcm5lZCFcIlxyXG5dO1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlVHdvTm90ZUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0d29Ob3RlTWVzc2FnZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gdHdvTm90ZU1lc3NhZ2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlUG9pbnRzKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHJhbmRvbVBvaW50Tm90aWNlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSByYW5kb21Qb2ludE5vdGljZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG4vLyBFeGFtcGxlIHVzYWdlXHJcbi8vIGNvbnN0IHJhbmRvbVBvaW50cyA9IDEwMDsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIHBvaW50cyB2YWx1ZVxyXG4vLyBjb25zdCByYW5kb21NZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShyYW5kb21Qb2ludHMpO1xyXG4vLyBjb25zb2xlLmxvZyhyYW5kb21NZXNzYWdlKTtcclxuXHJcblxyXG4iXSwKICAi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LElBQU0sMkJBQTJCO0FBQ2pDLElBQU0sb0JBQXFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNIbEMsU0FBb0I7QUFDcEIsV0FBc0I7QUFFZixTQUFTLDZCQUE2QixnQkFBd0IsYUFBcUIsYUFBNkI7QUFDdEgsUUFBTSxnQkFBZ0IsY0FBYyxNQUFN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LElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxJQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLEtBQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDbkQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN0RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFDekQ7QUFFTyxTQUFTLGtCQUFrQixRQUEyQjtBQUMzRCxNQUFJLFFBQW1CLFVBQVUsQ0FBQztBQUNsQyxhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLFVBQVUsS0FBSyxRQUFRO0FBQ3pCLGNBQVE7QUFBQSxJQUNWLE9BQU87QUFDTDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBRU8sU0FBUyxxQkFBcUIsYUFBNkI7QUFDaEUsTUFBSSxlQUFlO0FBQ25CLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksZUFBZSxLQUFLLFNBQVMsZ0JBQWdCLEdBQUc7QUFDbEQscUJBQWUsS0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUdGLFNBQU87QUFDUDs7O0FDOUlGLElBQU0sMEJBQW9DO0FBQUEsRUFDekM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLGtCQUE0QjtBQUFBLEVBQ2pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLHFCQUErQjtBQUFBLEVBQ3BDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBR08sU0FBUyxnQ0FBZ0MsUUFBd0I7QUFDdkUsUUFBTSxjQUFjLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSx3QkFBd0IsTUFBTTtBQUM3RSxRQUFNLFVBQVUsd0JBQXdCLFdBQVc7QUFDbkQs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RDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K diff --git a/src/settings.ts b/src/settings.ts index 603c58e..adf1afd 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -25,6 +25,7 @@ export const defaultSettings: Partial = { weeklyNoteCreationTask: 0, weeklyNoteCreationDate: '12.08.2023', streakbooster: 0, + streakboosterAlive: false, }; export interface ISettings { @@ -51,6 +52,7 @@ export interface ISettings { weeklyNoteCreationTask: number; weeklyNoteCreationDate: string; streakbooster: number; + streakboosterAlive: boolean; } @@ -80,6 +82,7 @@ export class GamificationPluginSettings extends PluginSettingTab { public weeklyNoteCreationTask: number; public weeklyNoteCreationDate: string; public streakbooster: number; + public streakboosterAlive: boolean; constructor(app: App, plugin: gamification) { super(app, plugin); From df313d0e891799ad0f0c1a74e324237e0cd3e0ab Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 21:38:42 +0200 Subject: [PATCH 04/15] increase booster for challenge reaches --- main.js | 6 +++++- src/main.ts | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/main.js b/main.js index d4382a5..f9a1ad3 100644 --- a/main.js +++ b/main.js @@ -2988,6 +2988,8 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` await this.updateAvatarPage(this.settings.avatarPageName); console.log(`${newDailyNoteCreationTask}/2 Notes created today.`); } else if (newDailyNoteCreationTask == 2) { + this.increaseStreakbooster(0.1); + await this.saveSettings(); await this.giveStatusPoints(pointsForDailyChallenge); const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge); console.log(`daily Challenge reached! ${newDailyNoteCreationTask}/2 created.`); @@ -3024,6 +3026,8 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` await this.updateAvatarPage(this.settings.avatarPageName); console.log(`${newWeeklyNoteCreationTask}/7 Notes created in a chain.`); } else if (newWeeklyNoteCreationTask == 7) { + this.increaseStreakbooster(1); + await this.saveSettings(); await this.giveStatusPoints(pointsForWeeklyChallenge); console.log(`Weekly Challenge reached! ${newWeeklyNoteCreationTask}/7 created in a chain.`); const message = getRandomMessageWeeklyChallenge(pointsForWeeklyChallenge); @@ -3423,4 +3427,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgY3JlYXRlZC5gKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpO1xyXG5cdFx0fSBlbHNlIGlmIChpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0Ly8gZG8gbm90aGluZ1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgbm90ZSBjcmVhdGlvbiB3YXMgcmF0ZWQgYWxyZWFkeSB0b2RheS5gKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IDE7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpIHtcclxuXHRcdGxldCBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzID0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0aWYgKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPCA3KSB7XHJcblx0XHRcdGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMrKztcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXM7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblxyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24oY3VycmVudFdlZWtseUNyZWF0ZWROb3Rlcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24obmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyKSB7XHJcblx0XHRpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA8PSA2KSB7XHJcblx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9IGVsc2UgaWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPT0gNykge1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSk7XHJcblx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB1cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyOiBIVE1MU3BhbkVsZW1lbnQpe1xyXG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHModGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpXHJcblx0XHRjb25zdCBwcm9ncmVzc2JhclBlcmNlbnQgPSAodGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMFxyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9YClcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyOiBudW1iZXIsIGJhckxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRsZXQgcHJvZ3Jlc3NiYXIgPSAnJ1xyXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gY2hhck51bVByb2dyZXNzYmFyOyBpKyspIHtcclxuXHRcdFx0aWYgKGkgPD0gYmFyTGVuZ3RoKSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJz0nXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJy0nXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9ncmVzc2JhcjtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZFNldHRpbmdzKCknKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0bGV0IHN0cmVha2Jvb3N0ZXIgPSB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXI7XHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3IgPSB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyKSArIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VTdHJlYWtib29zdGVyKGluY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArPSBpbmNyZWFzZVZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZGVjcmVhc2VTdHJlYWtib29zdGVyKGRlY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdGxldCBuZXdWYWx1ZSA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtPSBkZWNyZWFzZVZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmxldmVsQW5kUG9pbnRzXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeZGFpbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UzID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UzID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIHJlYWQgY3VycmVudCBQb2ludHMgZnJvbSBzZXR0aW5nc1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzID0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHJcblx0XHRjb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKG5ld1BvaW50cyk7XHJcblx0XHRsZXQgbmV4dExldmVsQXQgPSB0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsO1xyXG5cdFx0bGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA8IGxldmVsLmxldmVsKXtcclxuXHRcdFx0Ly8gTGV2ZWwgVXAgYXJjaGl2ZWRcclxuXHRcdFx0bmV3IE5vdGljZShgV2l0aCAke25ld1BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsLmxldmVsfS5gKVxyXG5cdFx0XHQvLyBjaGVjayBmaXJzdCBpZiB0aGlzIG1lYW5zIGEgbmV3IGJhZGdlIGJlZm9yZSBpdCBnZXRzIG92ZXJ3cml0dGVuXHJcblx0XHRcdHJlY2VpdmVCYWRnZSA9IGNoZWNrSWZSZWNlaXZlQUJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGxldmVsLmxldmVsKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsID0gbGV2ZWwubGV2ZWw7XHJcblx0XHRcdG5leHRMZXZlbEF0ID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwcm9ncmVzc0JhckVuZCA9IG5leHRMZXZlbEF0IC0gbmV3UG9pbnRzO1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzU3RyaW5nID0gJ3wgKipMZXZlbCoqICB8ICoqJyArIGxldmVsLmxldmVsICsgJyoqIHxcXG58IFBvaW50cyB8ICcgKyBuZXdQb2ludHMgKyAnICAgIHxcXG5ebGV2ZWxBbmRQb2ludHNcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW0V4cHJpcmllbmNlXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXFxuICAgIGRhdGE6IFsnICsgbmV3UG9pbnRzICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgcHJvZ3Jlc3NCYXJFbmQgKyAnXVxcbnhNaW46ICcgKyBsZXZlbC5wb2ludHMgKyAnXFxueE1heDogJyArIGxldmVsLnBvaW50c05leHQgKyAnXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJ1xyXG5cdFx0Y29uc3QgZGFpbHlDaGFsbGVuZ2UgPSAnfCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKionICsgdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgKyAnLzIqKiAgIHwnO1xyXG5cdFx0Y29uc3QgZGF5c0xlZnRJbldlZWtseUNoYWluIDogbnVtYmVyID0gNyAtIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGNvbnN0IHdlZWtseUNoYWxsZW5nZSA9ICd8ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsKXtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAyO1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyNDtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQzID0gcmVmZXJlbmNlMyArIDI0IC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZWNlaXZlQmFkZ2VcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBnaXZlQmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IGJhZGdlLmxldmVsICsgXCI6ICpcIiArIGJhZGdlLm5hbWUgKyBcIipcIil7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDE7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyICsgMjtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqIFwiICsgYmFkZ2UubGV2ZWwgKyBcIlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXVxyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMi5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlSW5pdEJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKipcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgcmVtb3ZlQmFkZ2VzV2hlbkluaXRMZXZlbEhpZ2hlcihhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBsZXZlbDogbnVtYmVyKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgb3V0c3RhbmRpbmdcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyID09IG51bGwpe1xyXG5cdFx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cclxuXHRcdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGxldmVsKSB7XHJcblx0XHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgcmVmZXJlbmNlICsgMSksIC4uLmxpbmVzLnNsaWNlKHJlZmVyZW5jZTIpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBjcmVhdGVDaGFydCh2YXVsdDogVmF1bHQpOiBQcm9taXNlPHN0cmluZz57XHJcblx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RmlsZSA9IGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlcylcclxuXHRcdC8vbGV0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lXHJcblx0XHQvL2lmIChlYXJsaWVzdEZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lICl7XHJcblx0XHRjb25zdCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5tdGltZVxyXG5cdFx0Ly99XHJcblxyXG5cdFx0bGV0IG1vbnRoQ291bnRlciA9IDAgLy9mb3JtYXQobmV3IERhdGUoZWFybGllc3REYXRlKSwgJ01NJyk7XHJcblx0XHRsZXQgZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHQvL2NvbnN0IGZpbGVEYXRlTW9udGhNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgZmlsZURhdGVNb250aE1hcE1vZCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBtb250aGNvdW50ID0gbW9udGhzQmV0d2VlbihuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCBuZXcgRGF0ZSgpKVxyXG5cdFx0bGV0IGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0bGV0IHlMYWJlbCA9IFwiXCJcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBjcmVhdGVkXHJcblx0XHQvKndoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH0qL1xyXG5cclxuXHRcdG1vbnRoQ291bnRlciA9IDBcclxuXHRcdGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgbW9kaWZpZWRcclxuXHRcdHdoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHR5TGFiZWwgPSB5TGFiZWwgKyBkYXRlU3RyaW5nICsgXCIsIFwiXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fVxyXG5cdFx0eUxhYmVsID0geUxhYmVsLnNsaWNlKDAseUxhYmVsLmxlbmd0aC0yKVxyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdC8qY29uc3QgY3JlYXRpb25EYXRlcyA9IGdldENyZWF0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNyZWF0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fSovXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgbW9kIGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdGNvbnN0IG1vZGlmaWNhdGlvbkRhdGVzID0gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgY3JlYXRlZFxyXG5cdFx0LypsZXQgY2hhclN0cmluZ0NyZWF0ZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcCkge1xyXG5cdFx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQuc2xpY2UoMCxjaGFyU3RyaW5nQ3JlYXRlZC5sZW5ndGgtMikqL1xyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBtb2RpZmllZFxyXG5cdFx0bGV0IGNoYXJTdHJpbmdNb2RpZmllZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwTW9kKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGtleTogJHtrZXl9LCB2YWx1ZTogJHt2YWx1ZX1gKTtcclxuXHRcdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZC5zbGljZSgwLGNoYXJTdHJpbmdNb2RpZmllZC5sZW5ndGgtMilcclxuXHJcblx0XHRyZXR1cm4gY3JlYXRlQ2hhcnRGb3JtYXQoeUxhYmVsLCBjaGFyU3RyaW5nTW9kaWZpZWQsIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbDogUHJvbWlzZTxib29sZWFuPil7XHJcblx0XHRuZXdMZXZlbC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pPT4ge1xyXG5cdFx0XHRpZihyZXN1bHQpe1xyXG5cdFx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGZhbHNlKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhgYmFkZ2UgZm9yIGxldmVsICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gaXMgJHtiYWRnZS5uYW1lfSAtICR7YmFkZ2UubGV2ZWx9YClcclxuXHRcdFx0XHR0aGlzLmdpdmVCYWRnZUluUHJvZmlsZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBiYWRnZSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0XHRcdHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVtb3ZlS2V5c0Zyb21Gcm9udG1hdHRlcigpIHtcclxuXHRcdC8vY29uc3QgeyBWYXVsdCwgVEZpbGUgfSA9IHdpbmRvdy5hcHA7XHJcblx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcFxyXG5cdFx0Ly9jb25zdCB2YXVsdCA9IFZhdWx0LnJlb3BlbigpO1xyXG5cclxuXHRcdC8vIEdldCBhbGwgTWFya2Rvd24gZmlsZXMgaW4gdGhlIHZhdWx0XHJcblx0XHQvL2NvbnN0IG1hcmtkb3duRmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXAgPSBhd2FpdCBnZXRGaWxlQ291bnRNYXAodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MudGFnc0V4Y2x1ZGUsIHRoaXMuc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSk7XHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcC5rZXlzKCkpIHtcclxuXHRcdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRGaWxlcygpO1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZXMuZmluZChmaWxlID0+IGZpbGUuYmFzZW5hbWUgPT09IGZpbGVOYW1lKTtcclxuXHRcdFx0aWYgKCFmaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGBGaWxlICR7ZmlsZU5hbWV9IG5vdCBmb3VuZC5gKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL2NvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWV9YCk7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIG5ldyBOb3RpY2UoYFJlbW92ZWQgc3BlY2lmaWVkIGtleXMgZnJvbSBmcm9udG1hdHRlciBmcm9tIGZpbGUgXFxcIiR7ZmlsZU5hbWV9XFxcIi5gKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHdoaWNoTGV2ZWxOZXh0QmFkZ2UoY3VycmVudExldmVsOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj57XHJcblx0XHRsZXQgbmV4dEJhZGdlTGV2ZWwgPSAwXHJcblx0XHRmb3IgKGxldCBpID0gY3VycmVudExldmVsOyBpIDwgMTEwOyBpKyspe1xyXG5cdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChpLCB0cnVlKVxyXG5cdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdGNvbnN0IG1hdGNoID0gYmFkZ2UubGV2ZWwubWF0Y2gobGV2ZWxSZWdleCk7XHJcblx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBjdXJyZW50TGV2ZWwgJiYgbmV4dEJhZGdlTGV2ZWwgPT0gMCApIHtcclxuXHRcdFx0XHRcdG5leHRCYWRnZUxldmVsID0gbGV2ZWxOdW1iZXI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV4dEJhZGdlTGV2ZWxcclxuXHR9XHJcblxyXG5cdGFzeW5jIGJvb3N0ZXJGb3JJbml0KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcblx0XHRjb25zdCBuZXh0QmFkZ2VBdCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0Y29uc3Qgc3RhdHVzUG9pbnRzVG9SZWFjaCA9IHN0YXR1c1BvaW50c0ZvckxldmVsKG5leHRCYWRnZUF0KVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgc3RhdHVzUG9pbnRzVG9SZWFjaCBmb3IgbmV4dCBCYWRnZTogJHtzdGF0dXNQb2ludHNUb1JlYWNofWApXHJcblx0XHQvLyA1MCBOb3RlcyBmcm9tIExldmVsIDEgdG8gNSB0byBnZXQgdGhlIGZpcnN0IGJhZGdlLlxyXG5cdFx0Ly8gMzAwIFBvaW50cyBpbiBhdmVyYWdlIGZvciBhIE5vdGUuXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gTWF0aC5yb3VuZCgoc3RhdHVzUG9pbnRzVG9SZWFjaCAtIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKS81MC8zMDApO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSBib29zdGVyRmFjdG9yXHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gdHJ1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgYm9vc3RlckZha3RvcjogJHtib29zdGVyRmFjdG9yfWApXHJcblx0XHRyZXR1cm4gYm9vc3RlckZhY3RvclxyXG5cdH1cclxuXHJcblx0YXN5bmMgb3BlbkF2YXRhckZpbGUoKSB7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlKXtcclxuXHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk/LnBhdGggfHwgJyc7XHJcblx0XHRcdGF3YWl0IGFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGV4aXN0aW5nRmlsZS5wYXRoLCBzb3VyY2VQYXRoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwiRmlsZSBub3QgZm91bmQgb3IgdW5hYmxlIHRvIG9wZW4uXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpc1NhbWVEYXkoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBjdXJyZW50RGF0ZSA9IHdpbmRvdy5tb21lbnQoKTsgLy8gR2V0IHRoZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gY3VycmVudERhdGUuaXNTYW1lKGlucHV0RGF0ZSwgJ2RheScpOyAvLyBDaGVjayBpZiB0aGV5IGFyZSB0aGUgc2FtZSBkYXlcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPbmVEYXlCZWZvcmUoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBvbmVEYXlCZWZvcmVDdXJyZW50ID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKTsgLy8gQ2FsY3VsYXRlIG9uZSBkYXkgYmVmb3JlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBpbnB1dERhdGUuaXNTYW1lKG9uZURheUJlZm9yZUN1cnJlbnQsICdkYXknKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXZhdGFyRmlsZShhcHA6IEFwcCwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG5cdC8vc2V0dGluZ3M6IEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzO1xyXG5cdC8vIERlZmluZSB0aGUgZmlsZSBuYW1lIGFuZCBjb250ZW50XHJcblx0Ly9jb25zdCBmaWxlTmFtZSA9ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nOyAvLyB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lO1xyXG5cdC8vY29uc29sZS5sb2coYGZpbGVOYW1lOiAke2ZpbGVOYW1lfWApXHJcblxyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7ZmlsZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2ZpbGVOYW1lfS5tZCBhbHJlYWR5IGV4aXN0c2ApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHQvLyBDcmVhdGUgdGhlIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHZhdWx0XHJcblx0YXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShgJHtmaWxlTmFtZX0ubWRgLCBhdmF0YXJJbml0Q29udGVudCk7XHJcblxyXG59XHJcblxyXG5cclxuY2xhc3MgTW9kYWxJbmZvcm1hdGlvbmJveCBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmc7IC8vIFN0b3JlIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZGlzcGxheVRleHQ6IHN0cmluZykge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dDsgLy8gU3RvcmUgdGhlIHBhc3NlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5zZXRUZXh0KHRoaXMuZGlzcGxheVRleHQpOyAvLyBVc2UgdGhlIHN0b3JlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlRm9ybWF0U3RyaW5ncyhsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpIHtcclxuXHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHJcblx0aWYgKCFhY3RpdmVWaWV3KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gYWN0aXZlIE1hcmtkb3duIHZpZXcgZm91bmQuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgZWRpdG9yID0gYWN0aXZlVmlldy5lZGl0b3I7XHJcblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cclxuXHRpZiAoIXNlbGVjdGVkVGV4dCkge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIHRleHQgc2VsZWN0ZWQgKGZvciBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIHN3aXRjaCBMYXllciAyICYgMykuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0bGV0IHJlcGxhY2VkVGV4dCA9IHNlbGVjdGVkVGV4dC5yZXBsYWNlQWxsKGxheWVyMiwgXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIik7XHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIzLCBcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIsIGxheWVyMilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiLCBsYXllcjMpXHJcblxyXG5cdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHJlcGxhY2VkVGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IG51bWJlciB7XHJcblx0bGV0IHJhdGluZ0Zha3RvcjogbnVtYmVyXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSByYXRpbmdOZXcgLSBwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMClcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gMFxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ0Zha3RvclxyXG59XHJcblxyXG5cclxuXHJcbiAgXHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4iLCAiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IGdhbWlmaWNhdGlvbiBmcm9tICcuL21haW4nO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBQYXJ0aWFsPElTZXR0aW5ncz4gPSB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiB0cnVlLFxuICBiaW5kRW50ZXI6IHRydWUsXG4gIGJpbmRUYWI6IHRydWUsXG4gIGF2YXRhclBhZ2VOYW1lOiAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJyxcbiAgdGFnc0V4Y2x1ZGU6ICcnLFxuICBmb2xkZXJFeGNsdWRlOiAnRXhjYWxpZHJhdycsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiAnPT0nLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogJyoqJyxcbiAgbnVtQWxsRmlsZXM6IDEsXG4gIG51bUFsbEZpbGVzQ291bnQ6IDAsXG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IDAsXG4gIHN0YXR1c1BvaW50czogMCxcbiAgc3RhdHVzTGV2ZWw6IDEsXG4gIHhwRm9yTmV4dExldmVsOiAxMDAwLFxuICBnYW1pZmljYXRpb25TdGFydERhdGU6ICcxMi4wOC4yMDIzJyxcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGZhbHNlLFxuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IDEsXG4gIGRlYnVnOiBmYWxzZSxcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICBzdHJlYWtib29zdGVyOiAwLFxuICBzdHJlYWtib29zdGVyQWxpdmU6IGZhbHNlLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2V0dGluZ3Mge1xuICBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgYmluZEVudGVyOiBib29sZWFuO1xuICBiaW5kVGFiOiBib29sZWFuO1xuICBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgc3RyZWFrYm9vc3RlckFsaXZlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJBbGl2ZTogYm9vbGVhbjtcblxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBnYW1pZmljYXRpb24pIHtcblx0ICBzdXBlcihhcHAsIHBsdWdpbik7XG5cdCAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cbiAgXG5cdHB1YmxpYyBkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Y29udGFpbmVyRWwuYWRkQ2xhc3MoXCJleGNhbGlkcmF3LXNldHRpbmdzXCIpO1xuXHRcdHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcblxuXHRcdGNvbnN0IGNvZmZlZURpdiA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdihcImNvZmZlZVwiKTtcblx0XHRjb2ZmZWVEaXYuYWRkQ2xhc3MoXCJleC1jb2ZmZWUtZGl2XCIpO1xuXHRcdGNvbnN0IGNvZmZlZUxpbmsgPSBjb2ZmZWVEaXYuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRocmVmOiBcImh0dHBzOi8va28tZmkuY29tL2FuZHJlYXN0cmViaW5nXCIsXG5cdFx0fSk7XG5cdFx0Y29uc3QgY29mZmVlSW1nID0gY29mZmVlTGluay5jcmVhdGVFbChcImltZ1wiLCB7XG5cdFx0YXR0cjoge1xuXHRcdFx0c3JjOiBcImh0dHBzOi8vY2RuLmtvLWZpLmNvbS9jZG4va29maTMucG5nP3Y9M1wiLFxuXHRcdH0sXG5cdFx0fSk7XG5cdFx0Y29mZmVlSW1nLmhlaWdodCA9IDQ1O1xuXG5cdFx0Ly9jb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXHRcdC8vY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgXG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnR2FtaWZ5IHlvdXIgUEtNIC0gU2V0dGluZ3MnIH0pO1xuXHRcdGNvbnNvbGUubG9nKCdzZXR0aW5ncyBjYWxsZWQnKVxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJyN0YWdzIHRvIGlnbm9yZScpXG5cdFx0XHQuc2V0RGVzYygnZW50ZXIgdGFncyB3aXRob3V0ICMgYW5kIHNlcGFyYXRlIHdpdGggXCIsIFwiLlxcbkluY2x1ZGUgbmVzdGVkIHRhZ3MuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgdGFnMSwgdGFnMi9zdWJ0YWcsIFx1MjAyNicpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdFx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdmb2xkZXIgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciBmb2xkZXIgd2hpY2hzIGNvbnRlbnQgc2hhbGwgYmUgaWdub3JlZC4gU2VwYXJhdGUgd2l0aCBcIiwgXCIuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgZm9sZGVyMSwgZm9sZGVyMiwgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9maWxlIFBhZ2UgTmFtZScpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2UgaGVyZSB0aGUgbmFtZSBvZiB5b3VyIHByb2ZpbGUgcGFnZSBpZiB5b3UgbGlrZS4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCduYW1lJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cdFx0XHRcdFxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ090aGVyIFNldHRpbmdzJyB9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdEaXNhYmxlIEluaXQgQ29tbWFuZCcpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiByZW1vdmUgdGhlIGluaXQgY29tbWFuZCBmcm9tIGNvbW1hbmQgcHJvbXB0IGJ5IHN3aXRjaGluZyBvZmYuXFxucmVzdGFydCBuZWVkZWQuJylcblx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4gXG5cdFx0XHRcdHRvZ2dsZVxuICAgICAgICAgIFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpXG4gICAgICAgIFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kID0gdmFsdWU7XG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgXHRcdFx0fSksXG5cdFx0XHQpO1xuXG5cdFx0XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnbGltaXQgdGhlIHZpc2libGUgbW9udGggaW4gdGhlIGNoYXJ0IG9uIHlvdXIgYXZhdGFyIHBhZ2U6ICcgKyB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdC5zZXREZXNjKCdpZiAwLCBhbGwgbW9udGggd2lsbCBiZSBzaG93bi4gRW50ZXIgYSBudW1iZXIgaG93IG1hbnkgbW9udGggc2hhbGwgYmUgc2hvd24uJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTnVtYmVyIG9mIE1vbnRoIHRvIHNob3cnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlLnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cbiAgXG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9ncmVzc2l2ZSBTdW1tYXJpemF0aW9uJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSB3aGljaCBmb3JtYXR0aW5nIHlvdSB1c2UgZm9yIExheWVyIDIgYW5kIDMuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMiBpcyB1c3VhbGx5ICoqJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSlcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMyBpcyB1c3VhbGx5ID09Jylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0fSkpO1xuXG5cdH1cbiAgfSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1aXJlZEFyZ3MocmVxdWlyZWQsIGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgcmVxdWlyZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHJlcXVpcmVkICsgJyBhcmd1bWVudCcgKyAocmVxdWlyZWQgPiAxID8gJ3MnIDogJycpICsgJyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3MubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgZGF0ZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZShOYU4pKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBzb21lIHZhbHVlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKCcyMDE0LTAyLTMxJylcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIG9iamVjdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSh7fSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTtcblxuICAvLyBDbG9uZSB0aGUgZGF0ZVxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YoYXJndW1lbnQpID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjc3RyaW5nLWFyZ3VtZW50c1wiKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufSIsICJpbXBvcnQgaXNEYXRlIGZyb20gXCIuLi9pc0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNWYWxpZFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB2YWxpZD9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgZmFsc2UgaWYgYXJndW1lbnQgaXMgSW52YWxpZCBEYXRlIGFuZCB0cnVlIG90aGVyd2lzZS5cbiAqIEFyZ3VtZW50IGlzIGNvbnZlcnRlZCB0byBEYXRlIHVzaW5nIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBJbnZhbGlkIERhdGUgaXMgYSBEYXRlLCB3aG9zZSB0aW1lIHZhbHVlIGlzIE5hTi5cbiAqXG4gKiBUaW1lIHZhbHVlIG9mIERhdGU6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuOS4xLjFcbiAqXG4gKiBAcGFyYW0geyp9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlIGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgyMDE0LCAxLCAzMSkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWx1ZSwgY29udmVydGFibGUgaW50byBhIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKDEzOTM4MDQ4MDAwMDApXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKCcnKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNWYWxpZChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIGlmICghaXNEYXRlKGRpcnR5RGF0ZSkgJiYgdHlwZW9mIGRpcnR5RGF0ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgcmV0dXJuICFpc05hTihOdW1iZXIoZGF0ZSkpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufSIsICJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdGltZXN0YW1wID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59IiwgImltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSBcIi4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9EQVkgPSA4NjQwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0RheU9mWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZZZWFyVGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIHZhciBkaWZmZXJlbmNlID0gdGltZXN0YW1wIC0gc3RhcnRPZlllYXJUaW1lc3RhbXA7XG4gIHJldHVybiBNYXRoLmZsb29yKGRpZmZlcmVuY2UgLyBNSUxMSVNFQ09ORFNfSU5fREFZKSArIDE7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSAxO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgeWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSk7XG4gIHZhciBmb3VydGhPZkphbnVhcnkgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5KTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENJU09XZWVrKGRhdGUpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkYXRlKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgInZhciBkZWZhdWx0T3B0aW9ucyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykge1xuICBkZWZhdWx0T3B0aW9ucyA9IG5ld09wdGlvbnM7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8ud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZmlyc3RXZWVrT2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWtPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mVGhpc1llYXIsIG9wdGlvbnMpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuICB2YXIgeWVhciA9IGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWsgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vlay5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWssIG9wdGlvbnMpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ1dlZWsoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlciwgdGFyZ2V0TGVuZ3RoKSB7XG4gIHZhciBzaWduID0gbnVtYmVyIDwgMCA/ICctJyA6ICcnO1xuICB2YXIgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpO1xuICB3aGlsZSAob3V0cHV0Lmxlbmd0aCA8IHRhcmdldExlbmd0aCkge1xuICAgIG91dHB1dCA9ICcwJyArIG91dHB1dDtcbiAgfVxuICByZXR1cm4gc2lnbiArIG91dHB1dDtcbn0iLCAiaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqL1xudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuXG4gICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09ICd5eScgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbikge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICByZXR1cm4gdG9rZW4gPT09ICdNJyA/IFN0cmluZyhtb250aCArIDEpIDogYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENEYXRlKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRVVENIb3VycygpIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlWzBdO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSAnYW0nID8gJ2EubS4nIDogJ3AubS4nO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDTWludXRlcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgIHZhciBmcmFjdGlvbmFsU2Vjb25kcyA9IE1hdGguZmxvb3IobWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMykpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZnJhY3Rpb25hbFNlY29uZHMsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJpbXBvcnQgZ2V0VVRDRGF5T2ZZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0RheU9mWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuaW1wb3J0IGxpZ2h0Rm9ybWF0dGVycyBmcm9tIFwiLi4vbGlnaHRGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG52YXIgZGF5UGVyaW9kRW51bSA9IHtcbiAgYW06ICdhbScsXG4gIHBtOiAncG0nLFxuICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgbm9vbjogJ25vb24nLFxuICBtb3JuaW5nOiAnbW9ybmluZycsXG4gIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgbmlnaHQ6ICduaWdodCdcbn07XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCBNaWxsaXNlY29uZHMgaW4gZGF5ICAgICAgICAgICAgfFxuICogfCAgYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgfCAgQiAgfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgfFxuICogfCAgYyAgfCBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlayAgfCAgQyogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZSAgfCBMb2NhbCBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgfCAgRSAgfCBEYXkgb2Ygd2VlayAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRiogfCBEYXkgb2Ygd2VlayBpbiBtb250aCAgICAgICAgICAgfFxuICogfCAgZyogfCBNb2RpZmllZCBKdWxpYW4gZGF5ICAgICAgICAgICAgfCAgRyAgfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaSEgfCBJU08gZGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgfCAgSSEgfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgfFxuICogfCAgaiogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfCAgSiogfCBMb2NhbGl6ZWQgaG91ciB3L28gZGF5IHBlcmlvZCAgfFxuICogfCAgayAgfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgfCAgSyAgfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbCogfCAoZGVwcmVjYXRlZCkgICAgICAgICAgICAgICAgICAgfCAgTCAgfCBTdGFuZC1hbG9uZSBtb250aCAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbyEgfCBPcmRpbmFsIG51bWJlciBtb2RpZmllciAgICAgICAgfCAgTyAgfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgfFxuICogfCAgcCEgfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgfCAgUCEgfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgfFxuICogfCAgcSAgfCBTdGFuZC1hbG9uZSBxdWFydGVyICAgICAgICAgICAgfCAgUSAgfCBRdWFydGVyICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgciogfCBSZWxhdGVkIEdyZWdvcmlhbiB5ZWFyICAgICAgICAgfCAgUiEgfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgdCEgfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgfCAgVCEgfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgfFxuICogfCAgdSAgfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgfCAgVSogfCBDeWNsaWMgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgdiogfCBUaW1lem9uZSAoZ2VuZXJpYyBub24tbG9jYXQuKSAgfCAgViogfCBUaW1lem9uZSAobG9jYXRpb24pICAgICAgICAgICAgfFxuICogfCAgdyAgfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgfCAgVyogfCBXZWVrIG9mIG1vbnRoICAgICAgICAgICAgICAgICAgfFxuICogfCAgeCAgfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgfCAgWCAgfCBUaW1lem9uZSAoSVNPLTg2MDEpICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgfFxuICogfCAgeiAgfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgfCAgWiogfCBUaW1lem9uZSAoYWxpYXNlcykgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAhIGFyZSBub24tc3RhbmRhcmQsIGJ1dCBpbXBsZW1lbnRlZCBieSBkYXRlLWZuczpcbiAqIC0gYG9gIG1vZGlmaWVzIHRoZSBwcmV2aW91cyB0b2tlbiB0byB0dXJuIGl0IGludG8gYW4gb3JkaW5hbCAoc2VlIGBmb3JtYXRgIGRvY3MpXG4gKiAtIGBpYCBpcyBJU08gZGF5IG9mIHdlZWsuIEZvciBgaWAgYW5kIGBpaWAgaXMgcmV0dXJucyBudW1lcmljIElTTyB3ZWVrIGRheXMsXG4gKiAgIGkuZS4gNyBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAqIC0gYElgIGlzIElTTyB3ZWVrIG9mIHllYXIsIGFzIG9wcG9zZWQgdG8gYHdgIHdoaWNoIGlzIGxvY2FsIHdlZWsgb2YgeWVhci5cbiAqIC0gYFJgIGlzIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLCBhcyBvcHBvc2VkIHRvIGBZYCB3aGljaCBpcyBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogICBgUmAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJYCBhbmQgYGlgXG4gKiAgIGZvciB1bml2ZXJzYWwgSVNPIHdlZWstbnVtYmVyaW5nIGRhdGUsIHdoZXJlYXNcbiAqICAgYFlgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgd2AgYW5kIGBlYFxuICogICBmb3Igd2Vlay1udW1iZXJpbmcgZGF0ZSBzcGVjaWZpYyB0byB0aGUgbG9jYWxlLlxuICogLSBgUGAgaXMgbG9uZyBsb2NhbGl6ZWQgZGF0ZSBmb3JtYXRcbiAqIC0gYHBgIGlzIGxvbmcgbG9jYWxpemVkIHRpbWUgZm9ybWF0XG4gKi9cblxudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIEVyYVxuICBHOiBmdW5jdGlvbiBHKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBlcmEgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgPiAwID8gMSA6IDA7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gQUQsIEJDXG4gICAgICBjYXNlICdHJzpcbiAgICAgIGNhc2UgJ0dHJzpcbiAgICAgIGNhc2UgJ0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBBLCBCXG4gICAgICBjYXNlICdHR0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcbiAgICAgIGNhc2UgJ0dHR0cnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAneW8nKSB7XG4gICAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoeWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnkoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFk6IGZ1bmN0aW9uIFkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHNpZ25lZFdlZWtZZWFyID0gZ2V0VVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgd2Vla1llYXIgPSBzaWduZWRXZWVrWWVhciA+IDAgPyBzaWduZWRXZWVrWWVhciA6IDEgLSBzaWduZWRXZWVrWWVhcjtcblxuICAgIC8vIFR3byBkaWdpdCB5ZWFyXG4gICAgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgICB2YXIgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7XG4gICAgfVxuXG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICdZbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIFIoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgaXNvV2Vla1llYXIgPSBnZXRVVENJU09XZWVrWWVhcihkYXRlKTtcblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBFeHRlbmRlZCB5ZWFyLiBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZyB0aGUgeWVhciBvZiB0aGlzIGNhbGVuZGFyIHN5c3RlbS5cbiAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIGxvY2FsaXplcnMgYXJlIEIuQy4geWVhcnM6XG4gIC8vIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gIC8vIHwtLS0tLS18LS0tLS18LS0tLS18XG4gIC8vIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gIC8vIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gIC8vIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gIC8vIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAgLy8gd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkLlxuICB1OiBmdW5jdGlvbiB1KGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBRdWFydGVyXG4gIFE6IGZ1bmN0aW9uIFEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAnUSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAnUVEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdRbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAnUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAnUVFRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdRUVFRJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcTogZnVuY3Rpb24gcShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdxJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdxcSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ3FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdxcXFxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ3FxcXEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnTSc6XG4gICAgICBjYXNlICdNTSc6XG4gICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdNbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ01NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTU1NTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ01NTU0nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbiBMKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhtb250aCArIDEpO1xuICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMTCc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ0xvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdMTExMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTExMTCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIHdlZWsgb2YgeWVhclxuICB3OiBmdW5jdGlvbiB3KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciB3ZWVrID0gZ2V0VVRDV2VlayhkYXRlLCBvcHRpb25zKTtcbiAgICBpZiAodG9rZW4gPT09ICd3bycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIEkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGlzb1dlZWsgPSBnZXRVVENJU09XZWVrKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvV2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdkbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDRGF0ZSgpLCB7XG4gICAgICAgIHVuaXQ6ICdkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IGZ1bmN0aW9uIEQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mWWVhciA9IGdldFVUQ0RheU9mWWVhcihkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdEbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwge1xuICAgICAgICB1bml0OiAnZGF5T2ZZZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF5T2ZZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2Ygd2Vla1xuICBFOiBmdW5jdGlvbiBFKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnRSc6XG4gICAgICBjYXNlICdFRSc6XG4gICAgICBjYXNlICdFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ0VFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ0VFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnRUVFRSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgZGF5IG9mIHdlZWtcbiAgZTogZnVuY3Rpb24gZShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbilcbiAgICAgIGNhc2UgJ2UnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2VlJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2VvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2VlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnZWVlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdlZWVlJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiBmdW5jdGlvbiBjKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoc2FtZSBhcyBpbiBgZWApXG4gICAgICBjYXNlICdjJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2NvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnY2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdjY2NjJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBJU08gZGF5IG9mIHdlZWtcbiAgaTogZnVuY3Rpb24gaShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgaXNvRGF5T2ZXZWVrID0gZGF5T2ZXZWVrID09PSAwID8gNyA6IGRheU9mV2VlaztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAyXG4gICAgICBjYXNlICdpJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcbiAgICAgIGNhc2UgJ2lpJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29EYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAybmRcbiAgICAgIGNhc2UgJ2lvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ2lpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnaWlpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdpaWlpJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0sIFBNLCBtaWRuaWdodCwgbm9vblxuICBiOiBmdW5jdGlvbiBiKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA9PT0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYic6XG4gICAgICBjYXNlICdiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2JiYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiYic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiBCKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA+PSAxNykge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ldmVuaW5nO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uYWZ0ZXJub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gNCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5tb3JuaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5pZ2h0O1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdCJzpcbiAgICAgIGNhc2UgJ0JCJzpcbiAgICAgIGNhc2UgJ0JCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2hvJykge1xuICAgICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMTI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ0hvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENIb3VycygpLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIEsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgaWYgKHRva2VuID09PSAnS28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFsxLTI0XVxuICBrOiBmdW5jdGlvbiBrKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7XG4gICAgaWYgKHRva2VuID09PSAna28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdtbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDTWludXRlcygpLCB7XG4gICAgICAgIHVuaXQ6ICdtaW51dGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5tKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnc28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ1NlY29uZHMoKSwge1xuICAgICAgICB1bml0OiAnc2Vjb25kJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5TKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGFsd2F5cyBgJ1onYClcbiAgWDogZnVuY3Rpb24gWChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuICdaJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ1gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgXG4gICAgICBjYXNlICdYWFhYJzpcbiAgICAgIGNhc2UgJ1hYJzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGBcbiAgICAgIGNhc2UgJ1hYWFhYJzpcbiAgICAgIGNhc2UgJ1hYWCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgeDogZnVuY3Rpb24geChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICd4JzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuICAgICAgY2FzZSAneHh4eCc6XG4gICAgICBjYXNlICd4eCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG4gICAgICBjYXNlICd4eHh4eCc6XG4gICAgICBjYXNlICd4eHgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChHTVQpXG4gIE86IGZ1bmN0aW9uIE8oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAnTyc6XG4gICAgICBjYXNlICdPTyc6XG4gICAgICBjYXNlICdPT08nOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnT09PTyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pXG4gIHo6IGZ1bmN0aW9uIHooZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAneic6XG4gICAgICBjYXNlICd6eic6XG4gICAgICBjYXNlICd6enonOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnenp6eic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIHQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gTWF0aC5mbG9vcihvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gVChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBvcmlnaW5hbERhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApO1xuICB2YXIgbWludXRlcyA9IGFic09mZnNldCAlIDYwO1xuICBpZiAobWludXRlcyA9PT0gMCkge1xuICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTtcbiAgfVxuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkge1xuICAgIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpO1xuICB9XG4gIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCksIDIpO1xuICB2YXIgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAidmFyIGRhdGVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIHRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gdGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAncHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHBwJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHZhciBtYXRjaFJlc3VsdCA9IHBhdHRlcm4ubWF0Y2goLyhQKykocCspPy8pIHx8IFtdO1xuICB2YXIgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgdmFyIHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07XG4gIGlmICghdGltZVBhdHRlcm4pIHtcbiAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZyk7XG4gIH1cbiAgdmFyIGRhdGVUaW1lRm9ybWF0O1xuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0LnJlcGxhY2UoJ3t7ZGF0ZX19JywgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcpKS5yZXBsYWNlKCd7e3RpbWV9fScsIHRpbWVMb25nRm9ybWF0dGVyKHRpbWVQYXR0ZXJuLCBmb3JtYXRMb25nKSk7XG59O1xudmFyIGxvbmdGb3JtYXR0ZXJzID0ge1xuICBwOiB0aW1lTG9uZ0Zvcm1hdHRlcixcbiAgUDogZGF0ZVRpbWVMb25nRm9ybWF0dGVyXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9uZ0Zvcm1hdHRlcnM7IiwgIi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkpO1xuICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIHJldHVybiBkYXRlLmdldFRpbWUoKSAtIHV0Y0RhdGUuZ2V0VGltZSgpO1xufSIsICJ2YXIgcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zID0gWydEJywgJ0REJ107XG52YXIgcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMgPSBbJ1lZJywgJ1lZWVknXTtcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgaWYgKHRva2VuID09PSAnWVlZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnRCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnREQnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9XG59IiwgInZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIHNlY29uZCcsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIHhTZWNvbmRzOiB7XG4gICAgb25lOiAnMSBzZWNvbmQnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIGhhbGZBTWludXRlOiAnaGFsZiBhIG1pbnV0ZScsXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBtaW51dGUnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICB4TWludXRlczoge1xuICAgIG9uZTogJzEgbWludXRlJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgaG91cicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhIb3Vyczoge1xuICAgIG9uZTogJzEgaG91cicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhEYXlzOiB7XG4gICAgb25lOiAnMSBkYXknLFxuICAgIG90aGVyOiAne3tjb3VudH19IGRheXMnXG4gIH0sXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB3ZWVrJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgeFdlZWtzOiB7XG4gICAgb25lOiAnMSB3ZWVrJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgYWJvdXRYTW9udGhzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBtb250aCcsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICB4TW9udGhzOiB7XG4gICAgb25lOiAnMSBtb250aCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIHhZZWFyczoge1xuICAgIG9uZTogJzEgeWVhcicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6ICdvdmVyIDEgeWVhcicsXG4gICAgb3RoZXI6ICdvdmVyIHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiAnYWxtb3N0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhbG1vc3Qge3tjb3VudH19IHllYXJzJ1xuICB9XG59O1xudmFyIGZvcm1hdERpc3RhbmNlID0gZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UodG9rZW4sIGNvdW50LCBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQ7XG4gIHZhciB0b2tlblZhbHVlID0gZm9ybWF0RGlzdGFuY2VMb2NhbGVbdG9rZW5dO1xuICBpZiAodHlwZW9mIHRva2VuVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZSgne3tjb3VudH19JywgY291bnQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gJ2luICcgKyByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAnIGFnbyc7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGlzdGFuY2U7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRm9ybWF0TG9uZ0ZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgLy8gVE9ETzogUmVtb3ZlIFN0cmluZygpXG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgIHZhciBmb3JtYXQgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkRm9ybWF0TG9uZ0ZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuL2luZGV4LmpzXCI7XG52YXIgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdFRUVFLCBNTU1NIGRvLCB5JyxcbiAgbG9uZzogJ01NTU0gZG8sIHknLFxuICBtZWRpdW06ICdNTU0gZCwgeScsXG4gIHNob3J0OiAnTU0vZGQveXl5eSdcbn07XG52YXIgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdoOm1tOnNzIGEgenp6eicsXG4gIGxvbmc6ICdoOm1tOnNzIGEgeicsXG4gIG1lZGl1bTogJ2g6bW06c3MgYScsXG4gIHNob3J0OiAnaDptbSBhJ1xufTtcbnZhciBkYXRlVGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbWVkaXVtOiAne3tkYXRlfX0sIHt7dGltZX19JyxcbiAgc2hvcnQ6ICd7e2RhdGV9fSwge3t0aW1lfX0nXG59O1xudmFyIGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdExvbmc7IiwgInZhciBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6ICdQJ1xufTtcbnZhciBmb3JtYXRSZWxhdGl2ZSA9IGZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlKHRva2VuLCBfZGF0ZSwgX2Jhc2VEYXRlLCBfb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UmVsYXRpdmVMb2NhbGVbdG9rZW5dO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFJlbGF0aXZlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZExvY2FsaXplRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRpcnR5SW5kZXgsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogJ3N0YW5kYWxvbmUnO1xuICAgIHZhciB2YWx1ZXNBcnJheTtcbiAgICBpZiAoY29udGV4dCA9PT0gJ2Zvcm1hdHRpbmcnICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciB3aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBkZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1t3aWR0aF0gfHwgYXJncy5mb3JtYXR0aW5nVmFsdWVzW2RlZmF1bHRXaWR0aF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgX3dpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1tfd2lkdGhdIHx8IGFyZ3MudmFsdWVzW19kZWZhdWx0V2lkdGhdO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2soZGlydHlJbmRleCkgOiBkaXJ0eUluZGV4O1xuICAgIC8vIEB0cy1pZ25vcmU6IEZvciBzb21lIHJlYXNvbiBUeXBlU2NyaXB0IGp1c3QgZG9uJ3Qgd2FudCB0byBtYXRjaCBpdCwgbm8gbWF0dGVyIGhvdyBoYXJkIHdlIHRyeS4gSSBjaGFsbGVuZ2UgeW91IHRvIHRyeSB0byByZW1vdmUgaXQhXG4gICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4XTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTG9jYWxpemVGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanNcIjtcbnZhciBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydCJywgJ0EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnQkMnLCAnQUQnXSxcbiAgd2lkZTogWydCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJ11cbn07XG52YXIgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbJzEnLCAnMicsICczJywgJzQnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnUTEnLCAnUTInLCAnUTMnLCAnUTQnXSxcbiAgd2lkZTogWycxc3QgcXVhcnRlcicsICcybmQgcXVhcnRlcicsICczcmQgcXVhcnRlcicsICc0dGggcXVhcnRlciddXG59O1xuXG4vLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG52YXIgbW9udGhWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydKJywgJ0YnLCAnTScsICdBJywgJ00nLCAnSicsICdKJywgJ0EnLCAnUycsICdPJywgJ04nLCAnRCddLFxuICBhYmJyZXZpYXRlZDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuICB3aWRlOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXVxufTtcbnZhciBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ10sXG4gIHNob3J0OiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXG4gIGFiYnJldmlhdGVkOiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuICB3aWRlOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J11cbn07XG52YXIgZGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH1cbn07XG52YXIgZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9XG59O1xudmFyIG9yZGluYWxOdW1iZXIgPSBmdW5jdGlvbiBvcmRpbmFsTnVtYmVyKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykge1xuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICAvLyBJZiBvcmRpbmFsIG51bWJlcnMgZGVwZW5kIG9uIGNvbnRleHQsIGZvciBleGFtcGxlLFxuICAvLyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCBncmFtbWF0aWNhbCBnZW5kZXJzLFxuICAvLyB1c2UgYG9wdGlvbnMudW5pdGAuXG4gIC8vXG4gIC8vIGB1bml0YCBjYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RhdGUnLCAnZGF5T2ZZZWFyJyxcbiAgLy8gJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLlxuXG4gIHZhciByZW0xMDAgPSBudW1iZXIgJSAxMDA7XG4gIGlmIChyZW0xMDAgPiAyMCB8fCByZW0xMDAgPCAxMCkge1xuICAgIHN3aXRjaCAocmVtMTAwICUgMTApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdzdCc7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnbmQnO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3JkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bWJlciArICd0aCc7XG59O1xudmFyIGxvY2FsaXplID0ge1xuICBvcmRpbmFsTnVtYmVyOiBvcmRpbmFsTnVtYmVyLFxuICBlcmE6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBlcmFWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IGZ1bmN0aW9uIGFyZ3VtZW50Q2FsbGJhY2socXVhcnRlcikge1xuICAgICAgcmV0dXJuIHF1YXJ0ZXIgLSAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogbW9udGhWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogJ3dpZGUnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxpemU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGg7XG4gICAgdmFyIG1hdGNoUGF0dGVybiA9IHdpZHRoICYmIGFyZ3MubWF0Y2hQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5tYXRjaFBhdHRlcm5zW2FyZ3MuZGVmYXVsdE1hdGNoV2lkdGhdO1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChtYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG4gICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkocGFyc2VQYXR0ZXJucykgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSkgOiBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59XG5mdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkgJiYgcHJlZGljYXRlKG9iamVjdFtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoUGF0dGVybkZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MubWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7XG4gICAgaWYgKCFwYXJzZVJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKHBhcnNlUmVzdWx0WzBdKSA6IHBhcnNlUmVzdWx0WzBdO1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59IiwgImltcG9ydCBidWlsZE1hdGNoRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaEZuL2luZGV4LmpzXCI7XG5pbXBvcnQgYnVpbGRNYXRjaFBhdHRlcm5GbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuL2luZGV4LmpzXCI7XG52YXIgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKHRofHN0fG5kfHJkKT8vaTtcbnZhciBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcbnZhciBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGJ8YSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGJcXC4/XFxzP2NcXC4/fGJcXC4/XFxzP2NcXC4/XFxzP2VcXC4/fGFcXC4/XFxzP2RcXC4/fGNcXC4/XFxzP2VcXC4/KS9pLFxuICB3aWRlOiAvXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2lcbn07XG52YXIgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL15iL2ksIC9eKGF8YykvaV1cbn07XG52YXIgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaVxufTtcbnZhciBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV1cbn07XG52YXIgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2lcbn07XG52YXIgcGFyc2VNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXmovaSwgL15mL2ksIC9ebS9pLCAvXmEvaSwgL15tL2ksIC9eai9pLCAvXmovaSwgL15hL2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXSxcbiAgYW55OiBbL15qYS9pLCAvXmYvaSwgL15tYXIvaSwgL15hcC9pLCAvXm1heS9pLCAvXmp1bi9pLCAvXmp1bC9pLCAvXmF1L2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXVxufTtcbnZhciBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pXG59O1xudmFyIHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXVxufTtcbnZhciBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaVxufTtcbnZhciBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL15hL2ksXG4gICAgcG06IC9ecC9pLFxuICAgIG1pZG5pZ2h0OiAvXm1pL2ksXG4gICAgbm9vbjogL15uby9pLFxuICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksXG4gICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksXG4gICAgZXZlbmluZzogL2V2ZW5pbmcvaSxcbiAgICBuaWdodDogL25pZ2h0L2lcbiAgfVxufTtcbnZhciBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKHZhbHVlKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH0pLFxuICBlcmE6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2soaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCArIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICdhbnknLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbWF0Y2g7IiwgImltcG9ydCBmb3JtYXREaXN0YW5jZSBmcm9tIFwiLi9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0TG9uZyBmcm9tIFwiLi9fbGliL2Zvcm1hdExvbmcvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRSZWxhdGl2ZSBmcm9tIFwiLi9fbGliL2Zvcm1hdFJlbGF0aXZlL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9jYWxpemUgZnJvbSBcIi4vX2xpYi9sb2NhbGl6ZS9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoIGZyb20gXCIuL19saWIvbWF0Y2gvaW5kZXguanNcIjtcbi8qKlxuICogQHR5cGUge0xvY2FsZX1cbiAqIEBjYXRlZ29yeSBMb2NhbGVzXG4gKiBAc3VtbWFyeSBFbmdsaXNoIGxvY2FsZSAoVW5pdGVkIFN0YXRlcykuXG4gKiBAbGFuZ3VhZ2UgRW5nbGlzaFxuICogQGlzby02MzktMiBlbmdcbiAqIEBhdXRob3IgU2FzaGEgS29zcyBbQGtvc3Nub2NvcnBde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9rb3Nzbm9jb3JwfVxuICogQGF1dGhvciBMZXNoYSBLb3NzIFtAbGVzaGFrb3NzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbGVzaGFrb3NzfVxuICovXG52YXIgbG9jYWxlID0ge1xuICBjb2RlOiAnZW4tVVMnLFxuICBmb3JtYXREaXN0YW5jZTogZm9ybWF0RGlzdGFuY2UsXG4gIGZvcm1hdExvbmc6IGZvcm1hdExvbmcsXG4gIGZvcm1hdFJlbGF0aXZlOiBmb3JtYXRSZWxhdGl2ZSxcbiAgbG9jYWxpemU6IGxvY2FsaXplLFxuICBtYXRjaDogbWF0Y2gsXG4gIG9wdGlvbnM6IHtcbiAgICB3ZWVrU3RhcnRzT246IDAgLyogU3VuZGF5ICovLFxuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMVxuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxlOyIsICJpbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vLi4vbG9jYWxlL2VuLVVTL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0TG9jYWxlOyIsICJpbXBvcnQgaXNWYWxpZCBmcm9tIFwiLi4vaXNWYWxpZC9pbmRleC5qc1wiO1xuaW1wb3J0IHN1Yk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9uZ0Zvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuLCBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4sIHRocm93UHJvdGVjdGVkRXJyb3IgfSBmcm9tIFwiLi4vX2xpYi9wcm90ZWN0ZWRUb2tlbnMvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qc1wiOyAvLyBUaGlzIFJlZ0V4cCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cyBzZXBhcmF0ZWQgYnkgYHxgOlxuLy8gLSBbeVlRcU1Md0lkRGVjaWhIS2ttc11vIG1hdGNoZXMgYW55IGF2YWlsYWJsZSBvcmRpbmFsIG51bWJlciB0b2tlblxuLy8gICAob25lIG9mIHRoZSBjZXJ0YWluIGxldHRlcnMgZm9sbG93ZWQgYnkgYG9gKVxuLy8gLSAoXFx3KVxcMSogbWF0Y2hlcyBhbnkgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIGxldHRlclxuLy8gLSAnJyBtYXRjaGVzIHR3byBxdW90ZSBjaGFyYWN0ZXJzIGluIGEgcm93XG4vLyAtICcoJyd8W14nXSkrKCd8JCkgbWF0Y2hlcyBhbnl0aGluZyBzdXJyb3VuZGVkIGJ5IHR3byBxdW90ZSBjaGFyYWN0ZXJzICgnKSxcbi8vICAgZXhjZXB0IGEgc2luZ2xlIHF1b3RlIHN5bWJvbCwgd2hpY2ggZW5kcyB0aGUgc2VxdWVuY2UuXG4vLyAgIFR3byBxdW90ZSBjaGFyYWN0ZXJzIGRvIG5vdCBlbmQgdGhlIHNlcXVlbmNlLlxuLy8gICBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBzaW5nbGUgcXVvdGVcbi8vICAgdGhlbiB0aGUgc2VxdWVuY2Ugd2lsbCBjb250aW51ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG4vLyAtIC4gbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciB1bm1hdGNoZWQgYnkgcHJldmlvdXMgcGFydHMgb2YgdGhlIFJlZ0V4cHNcbnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG4vLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG52YXIgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcbnZhciBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG52YXIgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbnZhciB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG5cbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqID4gXHUyNkEwXHVGRTBGIFBsZWFzZSBub3RlIHRoYXQgdGhlIGBmb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKiAoc2VlIHRoZSBsYXN0IGV4YW1wbGUpXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDcgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBBY2NlcHRlZCBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDB0aCwgMTd0aCAgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgMjAxN3RoICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgUiAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSICAgICAgfCAtNDMsIDAwLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAwLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAwLCAwMDAxLCAxOTAwLCAyMDE3ICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUsNyB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCB1ICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCA3ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhICAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWEgICAgIHwgYW0sIHBtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCBiLi5iYiAgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiICAgICB8IGFtLCBwbSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmIgICAgfCBhLm0uLCBwLm0uLCBub29uLCBtaWRuaWdodCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiYiAgIHwgYSwgcCwgbiwgbWkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgIHwgQi4uQkJCICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkIgICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCQiAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgIHwgaCAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAxMnRoICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaCAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhvICAgICAgfCAwdGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgIHwgSyAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAwdGggICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLSyAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgIHwgayAgICAgICB8IDI0LCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtvICAgICAgfCAyNHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrayAgICAgIHwgMjQsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbSAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbSAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcyAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcyAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDEsIC4uLiwgOTk5ICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICAgfCBPLi4uT09PIHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT09PTyAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pICB8IHouLi56enogfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCA2ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB6enp6ICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiw2ICAgfFxuICogfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgIHwgdCAgICAgICB8IDUxMjk2OTUyMCAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR0ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8IFAgICAgICAgfCAwNC8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUCAgICAgIHwgQXByIDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQICAgICB8IEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFAgICAgfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcCAgICAgfCAxMjowMDowMCBBTSBHTVQrMiAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHBwICAgIHwgMTI6MDA6MDAgQU0gR01UKzAyOjAwICAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBDb21iaW5hdGlvbiBvZiBkYXRlIGFuZCB0aW1lICAgIHwgUHAgICAgICB8IDA0LzI5LzE0NTMsIDEyOjAwIEFNICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQcHAgICAgfCBBcHIgMjksIDE0NTMsIDEyOjAwOjAwIEFNICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBwcHAgIHwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUHBwcHB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICB8IDIsNyAgIHxcbiAqIE5vdGVzOlxuICogMS4gXCJGb3JtYXR0aW5nXCIgdW5pdHMgKGUuZy4gZm9ybWF0dGluZyBxdWFydGVyKSBpbiB0aGUgZGVmYXVsdCBlbi1VUyBsb2NhbGVcbiAqICAgIGFyZSB0aGUgc2FtZSBhcyBcInN0YW5kLWFsb25lXCIgdW5pdHMsIGJ1dCBhcmUgZGlmZmVyZW50IGluIHNvbWUgbGFuZ3VhZ2VzLlxuICogICAgXCJGb3JtYXR0aW5nXCIgdW5pdHMgYXJlIGRlY2xpbmVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxhbmd1YWdlXG4gKiAgICBpbiB0aGUgY29udGV4dCBvZiBhIGRhdGUuIFwiU3RhbmQtYWxvbmVcIiB1bml0cyBhcmUgYWx3YXlzIG5vbWluYXRpdmUgc2luZ3VsYXI6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqIDIuIEFueSBzZXF1ZW5jZSBvZiB0aGUgaWRlbnRpY2FsIGxldHRlcnMgaXMgYSBwYXR0ZXJuLCB1bmxlc3MgaXQgaXMgZXNjYXBlZCBieVxuICogICAgdGhlIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIChzZWUgYmVsb3cpLlxuICogICAgSWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIGxpc3RlZCBpbiB0YWJsZSAoZS5nLiBgRUVFRUVFRUVFRUVgKVxuICogICAgdGhlIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRlZmF1bHQgcGF0dGVybiBmb3IgdGhpcyB1bml0LCB1c3VhbGx5XG4gKiAgICB0aGUgbG9uZ2VzdCBvbmUgKGluIGNhc2Ugb2YgSVNPIHdlZWtkYXlzLCBgRUVFRWApLiBEZWZhdWx0IHBhdHRlcm5zIGZvciB1bml0c1xuICogICAgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU0nKSAvLz0+ICdOb3YnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NJykgLy89PiAnTidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqIDMuIFNvbWUgcGF0dGVybnMgY291bGQgYmUgdW5saW1pdGVkIGxlbmd0aCAoc3VjaCBhcyBgeXl5eXl5eXlgKS5cbiAqICAgIFRoZSBvdXRwdXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB6ZXJvcyB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAneXl5eXl5eXknKSAvLz0+ICcwMDAwMjAxNydgXG4gKlxuICogNC4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNS4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAqICAgIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZDpcbiAqXG4gKiAgICB8IFllYXIgfCBgeXlgIHwgYHV1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gKiAgICB8IDEgICAgfCAgIDAxIHwgICAwMSB8XG4gKiAgICB8IDE0ICAgfCAgIDE0IHwgICAxNCB8XG4gKiAgICB8IDM3NiAgfCAgIDc2IHwgIDM3NiB8XG4gKiAgICB8IDE0NTMgfCAgIDUzIHwgMTQ1MyB8XG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbZ2V0SVNPV2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0SVNPV2Vla1llYXJ9XG4gKiAgICBhbmQgW2dldFdlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldFdlZWtZZWFyfSkuXG4gKlxuICogNi4gU3BlY2lmaWMgbm9uLWxvY2F0aW9uIHRpbWV6b25lcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGluIGBkYXRlLWZuc2AsXG4gKiAgICBzbyByaWdodCBub3cgdGhlc2UgdG9rZW5zIGZhbGwgYmFjayB0byBHTVQgdGltZXpvbmVzLlxuICpcbiAqIDcuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYHRgOiBzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgVGA6IG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogOC4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA5LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIGRheXMgb2YgdGhlIG1vbnRoLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIHRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIgdG9rZW5zIGBZWWAgYW5kIGBZWVlZYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSBkYXkgb2YgeWVhciB0b2tlbnMgYERgIGFuZCBgRERgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRMb25nYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgN1xuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdChkaXJ0eURhdGUsIGRpcnR5Rm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfb3B0aW9ucyRsb2NhbGUsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlMiwgX29wdGlvbnMkbG9jYWxlMiRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIsIF9yZWY1LCBfcmVmNiwgX3JlZjcsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlMywgX29wdGlvbnMkbG9jYWxlMyRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0O1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGZvcm1hdFN0ciA9IFN0cmluZyhkaXJ0eUZvcm1hdFN0cik7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBsb2NhbGUgPSAoX3JlZiA9IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRsb2NhbGUgIT09IHZvaWQgMCA/IF9vcHRpb25zJGxvY2FsZSA6IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IGRlZmF1bHRMb2NhbGU7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYyID0gKF9yZWYzID0gKF9yZWY0ID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiRvcHRpID0gX29wdGlvbnMkbG9jYWxlMi5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTIkb3B0aS5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWY0ICE9PSB2b2lkIDAgPyBfcmVmNCA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWY1ID0gKF9yZWY2ID0gKF9yZWY3ID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyRvcHRpID0gX29wdGlvbnMkbG9jYWxlMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTMkb3B0aS53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY3ICE9PSB2b2lkIDAgPyBfcmVmNyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjYgIT09IHZvaWQgMCA/IF9yZWY2IDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0LndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjUgIT09IHZvaWQgMCA/IF9yZWY1IDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIGlmICghbG9jYWxlLmxvY2FsaXplKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gbG9jYWxpemUgcHJvcGVydHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5mb3JtYXRMb25nKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gZm9ybWF0TG9uZyBwcm9wZXJ0eScpO1xuICB9XG4gIHZhciBvcmlnaW5hbERhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIH1cblxuICAvLyBDb252ZXJ0IHRoZSBkYXRlIGluIHN5c3RlbSB0aW1lem9uZSB0byB0aGUgc2FtZSBkYXRlIGluIFVUQyswMDowMCB0aW1lem9uZS5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBVVEMgZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQsIGxvY2FsZXMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlbS5cbiAgLy8gU2VlIGFuIGlzc3VlIGFib3V0IFVUQyBmdW5jdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG4gIHZhciB0aW1lem9uZU9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlKTtcbiAgdmFyIHV0Y0RhdGUgPSBzdWJNaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlLCB0aW1lem9uZU9mZnNldCk7XG4gIHZhciBmb3JtYXR0ZXJPcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbjogd2Vla1N0YXJ0c09uLFxuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIF9vcmlnaW5hbERhdGU6IG9yaWdpbmFsRGF0ZVxuICB9O1xuICB2YXIgcmVzdWx0ID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICdwJyB8fCBmaXJzdENoYXJhY3RlciA9PT0gJ1AnKSB7XG4gICAgICB2YXIgbG9uZ0Zvcm1hdHRlciA9IGxvbmdGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgIHJldHVybiBcIidcIjtcbiAgICB9XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCInXCIpIHtcbiAgICAgIHJldHVybiBjbGVhbkVzY2FwZWRTdHJpbmcoc3Vic3RyaW5nKTtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdHRlcih1dGNEYXRlLCBzdWJzdHJpbmcsIGxvY2FsZS5sb2NhbGl6ZSwgZm9ybWF0dGVyT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChmaXJzdENoYXJhY3Rlci5tYXRjaCh1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCcgKyBmaXJzdENoYXJhY3RlciArICdgJyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIHZhciBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICByZXR1cm4gbWF0Y2hlZFsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwLCBcIidcIik7XG59IiwgImV4cG9ydCBjb25zdCBwb2ludHNOb3RlTWFqdXJpdHkgPSAxMDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNNYWp1cml0eSA9IDEwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgPSA1MDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgPSAyMDAwO1xyXG5leHBvcnQgY29uc3QgYXZhdGFySW5pdENvbnRlbnQgPSAgYCMgQXZhdGFyXHJcblxyXG58ICAgICAgICB8ICAgICB8XHJcbnwgLS0tLS0tIHwgLS0tIHxcclxufCBMZXZlbCAgfCAwICAgIHxcclxufCBQb2ludHMgfCAwICAgIHxcclxuXmxldmVsQW5kUG9pbnRzXHRcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW0V4cHJpcmllbmNlXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXHJcbiAgICBkYXRhOiBbMTAwMF1cclxueE1pbjogMFxyXG54TWF4OiAxMDAwXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCAgICAgICAgICAgICB8ICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLSB8IC0tLSB8IC0tLS0tIHxcclxufCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKiowLzIqKiB8XHJcbl5kYWlseU5vdGVzQ2hhbGxlbmdlXHJcbnwgIHwgICAgIHx8XHJcbnwgLS0tLSB8IC0tLSB8IC0tLSB8XHJcbnwgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKjAvNyoqICAgfFxyXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW05vdGVzXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogZGF5cyBkb25lIGluIGEgcm93XHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XHJcbiAgICBkYXRhOiBbN11cclxueE1pbjogMFxyXG54TWF4OiA3XHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwiZGF5c1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58IExldmVsIHwgQ291bnQgfFxyXG58IDotLS06IHwgOi0tLTogfFxyXG58IE1hanVyaXR5IDUgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs1LCAnNScsICc1XHUyN0ExXHVGRTBGJywgJzVcdTJCMDdcdUZFMEYnLCAnNVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDQgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs0LCAnNCcsICc0XHUyN0ExXHVGRTBGJywgJzRcdTJCMDdcdUZFMEYnLCAnNFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDMgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFszLCAnMycsICczXHUyN0ExXHVGRTBGJywgJzNcdTJCMDdcdUZFMEYnLCAnM1x1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDIgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsyLCAnMicsICcyXHUyN0ExXHVGRTBGJywgJzJcdTJCMDdcdUZFMEYnLCAnMlx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDEgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsxLCAnMScsICcxXHUyN0ExXHVGRTBGJywgJzFcdTJCMDdcdUZFMEYnLCAnMVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDAgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFswLCAnMCcsICcwXHUyN0ExXHVGRTBGJywgJzBcdTJCMDdcdUZFMEYnLCAnMFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG5cclxuXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFswLCAwLCAwXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogbW9kaWZpZWRcclxuICAgIGRhdGE6IFswLCAwLCAwXVxyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDgwICVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxueVRpdGxlOiBcIk51bWJlciBvZiBOb3Rlc1wiXHJcbnhUaXRsZTogXCJNb250aHNcIlxyXG54TWluOiAwXHJcblxcYFxcYFxcYFxyXG5eQ2hhcnRNb250aFxyXG5cclxuXHJcbiMjIyBCYWRnZXNcclxuIyMjIyBhY2hpZXZlZFxyXG5cclxuXHJcbiMjIyMgb3V0c3RhbmRpbmdcclxubGV2ZWwgNTogKkVubGlnaHRlbmVkIE5vdmljZSpcclxubGV2ZWwgMTA6ICpDdXJpb3VzIENvbm5vaXNzZXVyKlxyXG5sZXZlbCAyMDogKkJyYWluaWFjIFRyYWlsYmxhemVyKlxyXG5sZXZlbCAyNzogKlNjaG9sYXJseSBUcmFpbGJsYXplcipcclxubGV2ZWwgMzU6ICpJbmZvIE5pbmphIE1hc3RlcipcclxubGV2ZWwgNDI6ICpXaXNlIE93bCBHdXJ1KlxyXG5sZXZlbCA1MDogKkVpbnN0ZWluIEluY2FybmF0ZSpcclxubGV2ZWwgNjA6ICpNYXN0ZXJtaW5kIFNhZ2UqXHJcbmxldmVsIDc1OiAqQ2VyZWJyYWwgTWFlc3RybypcclxubGV2ZWwgODI6ICpaZW4gS25vd2xlZGdlIEtlZXBlcipcclxubGV2ZWwgOTA6ICpHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQqXHJcbmxldmVsIDEwMDogKk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nKlxyXG5cclxuXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNSoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA1IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA0KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDQgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAzXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAzIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDFcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDEgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAwXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAwIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuYDtcclxuIiwgImltcG9ydCB7IFRGaWxlLCBBcHAsIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZVByb2dyZXNzaXZlU3VtbWFyaXphdGlvbihjaGFyQ291bnRUb3RhbDogbnVtYmVyLCBsYXllcjJjb3VudDogbnVtYmVyLCBsYXllcjNjb3VudDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRjb25zdCBwZXJjZW50TGF5ZXIyID0gbGF5ZXIyY291bnQgKiAxMDAgLyBjaGFyQ291bnRUb3RhbDtcclxuICAgIGNvbnN0IHBlcmNlbnRMYXllcjMgPSBsYXllcjNjb3VudCAqIDEwMCAvIGxheWVyMmNvdW50O1xyXG5cdHZhciBsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0dmFyIGxheWVyM21hanVyaXR5ID0gMDtcclxuXHR2YXIgbWFqdXJpdHkgPSAwO1xyXG5cdGlmIChjaGFyQ291bnRUb3RhbCA8IDMwMDApIHtcclxuXHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdC8vY29uc29sZS5sb2coYE5vdGUgaXMgbm90IGxvbmcgZW5vdWdoIHRvIGdldCBpbnRvIGNhbGN1bGF0aW9uIGZvciBtYWp1cml0eS4gVGhlIHRvdGFsIGNoYXJhY3RlciBjb3VudCBpcyAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRpZiAocGVyY2VudExheWVyMiA9PSAwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDMwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjNjb3VudCA9PSAwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjJtYWp1cml0eSA9PSAxICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSAyICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA+PSAzICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmICgobGF5ZXIybWFqdXJpdHkgPT0gMyB8fCBsYXllcjJtYWp1cml0eSA9PSA0KSAmJiAobGF5ZXIzbWFqdXJpdHkgPT0gNCB8fCBsYXllcjNtYWp1cml0eSA9PSA1KSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDUgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gNSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRcclxuXHQvL2NvbnNvbGUubG9nKGBsYXllcjJtYWp1cml0eTogJHtsYXllcjJtYWp1cml0eX0gXFx0bGF5ZXIzbWFqdXJpdHk6ICR7bGF5ZXIzbWFqdXJpdHl9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYHBlcmNlbnRMYXllcjI6ICR7cGVyY2VudExheWVyMn0gXFx0cGVyY2VudExheWVyMzogJHtwZXJjZW50TGF5ZXIzfSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBjaGFyQ291bnRUb3RhbDogJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHRyZXR1cm4gbWFqdXJpdHk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgbGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKTogeyBjaGFyQ291bnQ6IG51bWJlcjsgaGlnaGxpZ2h0ZWRDb3VudDogbnVtYmVyOyBib2xkQ291bnQ6IG51bWJlciB9IHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblxyXG5cdC8vIGNhbGN1bGF0ZSBMYXllciAyICYgMyBMZW5ndGhcclxuXHJcblx0Ly8gQ291bnQgdGhlIGhpZ2hsaWdodGVkIGFuZCBib2xkIGNoYXJhY3RlcnNcclxuXHRsZXQgaGlnaGxpZ2h0ZWRDb3VudCA9IDA7XHJcblx0bGV0IGJvbGRDb3VudCA9IDA7XHJcbiAgXHJcblx0dmFyIGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR2YXIgbGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHQvLyB0byBoYXZlIHRoZSByZWcgZXggY29ycmVjdC4gb3RoZXJ3aXNlIGl0IHdpbGwgZ2V0IHN0dWMgd2l0aCAqKi5cclxuXHRpZihsYXllcjMgPT0gJyoqJyl7XHJcblx0XHRsYXllcjMgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0XHRsYXllcjJleGNsdWRlID0gJz0nXHJcblx0fVxyXG5cdGlmKGxheWVyMiA9PSAnKionKXtcclxuXHRcdGxheWVyMiA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICc9J1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICdcXFxcKidcclxuXHR9XHJcbiAgXHRcclxuXHJcblx0Y29uc3QgaGlnaGxpZ2h0UmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyMn1bXiR7bGF5ZXIyZXhjbHVkZX1dKyR7bGF5ZXIyfWAsIFwiZ1wiKTtcclxuICAgIGNvbnN0IGJvbGRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIzfVteJHtsYXllcjNleGNsdWRlfV0rJHtsYXllcjN9YCwgXCJnXCIpO1xyXG4gIFxyXG5cdC8vIENvdW50IGhpZ2hsaWdodGVkIGNoYXJhY3RlcnNcclxuXHRjb25zdCBoaWdobGlnaHRlZE1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKGhpZ2hsaWdodFJlZ2V4KTtcclxuXHRpZiAoaGlnaGxpZ2h0ZWRNYXRjaGVzKSB7XHJcblx0ICBoaWdobGlnaHRlZENvdW50ID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGhpZ2hsaWdodGVkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnPT0nXHJcblx0ICAvLyBmaXJzdCB0YWtlIHRoZSBsYXllcjIgKGhpZ2hsaWdodGVkQ291bnQpIGFuZCBydW4gb24gdGhpcyB0aGUgJ2JvbGRSZWdleCdcclxuXHQgIC8vIENvdW50IGJvbGQgY2hhcmFjdGVyc1xyXG5cdCAgY29uc3QgbGF5ZXIyU3RyaW5nID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIik7XHJcblx0ICBjb25zdCBib2xkTWF0Y2hlcyA9IGxheWVyMlN0cmluZy5tYXRjaChib2xkUmVnZXgpO1xyXG5cdCAgaWYgKGJvbGRNYXRjaGVzKSB7XHJcblx0ICAgIGJvbGRDb3VudCA9IGJvbGRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGJvbGRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICcqKidcclxuXHQgIH1cclxuXHR9XHJcbiAgXHJcblx0XHJcblx0XHJcbiAgXHJcblx0cmV0dXJuIHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfTtcclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxldmVsT2ZNYXR1cml0eShub3RlTGVuZ3RoOiBudW1iZXIsIGxlbmd0aE9mVGl0bGU6IG51bWJlciwgSW5saW5rczogbnVtYmVyLCBvdXRnb2luZ0xpbmtzOiBudW1iZXIsIHByb2dyZXNzaXZlU3VtTWFqdXJpdHk6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG5vdGVMZW5ndGg6ICR7bm90ZUxlbmd0aH1cXHRsZW5ndGhPZlRpdGxlOiAke2xlbmd0aE9mVGl0bGV9XFx0SW5saW5rczogJHtJbmxpbmtzfVxcdG91dGdvaW5nTGlua3M6ICR7b3V0Z29pbmdMaW5rc31gKVxyXG5cdFxyXG5cdC8vIGRlY2lkZSBpZiBub3RlTGVuZ3RoLW1hanVyaXR5IG9yIHByb2dyZXNzaXZlU3VtLW1hanVyaXR5IHNoYWxsIGJlIHVzZWRcclxuXHR2YXIgbGVuZ3RoTWFqdXJpdHkgPSAwO1xyXG5cdGlmKG5vdGVMZW5ndGggPj0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eSkge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBub3RlTGVuZ3RoO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IHByb2dyZXNzaXZlU3VtTWFqdXJpdHk7XHJcblx0fVxyXG5cdFxyXG5cdGNvbnN0IHRvdGFsV2VpZ2h0IDogbnVtYmVyID0gbGVuZ3RoTWFqdXJpdHkgKyBsZW5ndGhPZlRpdGxlICsgSW5saW5rcyArIG91dGdvaW5nTGlua3M7XHJcblx0Y29uc3QgYXZlcmFnZVdlaWdodCA9IHRvdGFsV2VpZ2h0IC8gNTtcclxuXHQvLyBjb25zb2xlLmxvZyhgdG90YWxXZWlnaHQ6ICR7dG90YWxXZWlnaHR9XFx0YXZlcmFnZVdlaWdodDogJHthdmVyYWdlV2VpZ2h0fWApXHJcblx0aWYgKGF2ZXJhZ2VXZWlnaHQgPCAwLjUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAxKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMikge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzLjUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSA0KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVPdXRsaW5rcyhvdXRsaW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgb3V0bGlua3M6ICR7b3V0bGlua3N9YClcclxuXHRpZiAob3V0bGlua3MgPCAyKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMykge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA5KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMikge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlSW5saW5rcyhudW1JbmxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vdmFyIHByb3plbnRJbmxpbmtzID0gbnVtSW5saW5rcyAqIDEwMCAvIG51bUFsbEZpbGVzO1xyXG5cdC8vY29uc29sZS5sb2coYG51bUlubGlua3M6ICR7bnVtSW5saW5rc31cXHRudW1BbGxGaWxlczogJHtudW1BbGxGaWxlc31cXHRwcm96ZW50SW5saW5rczogJHtwcm96ZW50SW5saW5rc31gKVxyXG5cdC8qaWYgKHByb3plbnRJbmxpbmtzIDwgMC4wMDUgfHwgcHJvemVudElubGlua3MgPiAwLjEpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSAqLyBpZiAobnVtSW5saW5rcyA9PSAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA0KSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA4KSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTYpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA+PSAxNiAmJiBudW1JbmxpbmtzIDwgNTAwICkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlRGlyZWN0aW9uKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCByYXRpbmcgPSBcIlwiXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA+IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwN1x1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDZcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID09IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MjdBMVx1RkUwRlwiXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXCJcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGVuZ3RoRmlsZW5hbWUoZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDMwKSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCA4MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTAwKSB7XHJcblx0cmV0dXJuIDM7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxNTApIHtcclxuXHRyZXR1cm4gNTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE5MCkge1xyXG5cdHJldHVybiA0O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjEwKSB7XHJcblx0cmV0dXJuIDI7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyNTApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2Uge1xyXG5cdHJldHVybiAwO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTm90ZUxlbmd0aChjb250ZW5sZW5ndGg6IG51bWJlcik6IG51bWJlciB7XHJcblx0aWYgKGNvbnRlbmxlbmd0aCA8IDIwMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCA1NTApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTAwMCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMjAwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDIwMDApIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjUwMCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAzMDAwKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWJlck9mT3V0bGlua3MoYWN0aXZlRmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG5cdC8vIGNvbnN0IGFjdGl2ZUZpbGU6IFRGaWxlIHwgbnVsbCA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG5cdGlmICghYWN0aXZlRmlsZSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cdGNvbnN0IGlubGlua3MgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoYWN0aXZlRmlsZSk/LmxpbmtzO1xyXG5cdHJldHVybiBpbmxpbmtzID8gT2JqZWN0LmtleXMoaW5saW5rcykubGVuZ3RoIDogMDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblx0cmV0dXJuIGNoYXJDb3VudDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzX3NpbmdsZShmaWxlX3BhdGg6IHN0cmluZywgdmF1bHRfcGF0aDogc3RyaW5nKTogbnVtYmVyIHtcclxuXHQvLyBHZXQgdGhlIGZpbGVuYW1lIGFuZCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUgd2UncmUgY291bnRpbmcgbGlua3MgdG9cclxuXHRjb25zdCBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZV9wYXRoKTtcclxuXHRjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZmlsZV9wYXRoKTtcclxuXHJcblx0Ly8gQ3JlYXRlIGEgc2V0IHRvIGhvbGQgYWxsIHRoZSBmaWxlcyB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3QgbGlua2luZ19maWxlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcblxyXG5cdC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgZmlsZXMgaW4gdGhlIHZhdWx0IGRpcmVjdG9yeSB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3Qgd2Fsa1N5bmMgPSAoZGlyOiBzdHJpbmcsIGZpbGVsaXN0OiBzdHJpbmdbXSkgPT4ge1xyXG5cdFx0Y29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpO1xyXG5cdFx0ZmlsZWxpc3QgPSBmaWxlbGlzdCB8fCBbXTtcclxuXHRcdGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRpZiAoZnMuc3RhdFN5bmMocGF0aC5qb2luKGRpciwgZmlsZSkpLmlzRGlyZWN0b3J5KCkpIHtcclxuXHRcdFx0XHRmaWxlbGlzdCA9IHdhbGtTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBmaWxlbGlzdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWdub3JlIG5vbi1tZCBmaWxlcyBhbmQgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGlmICghZmlsZS5lbmRzV2l0aChcIi5tZFwiKSB8fCBmaWxlID09PSBmaWxlbmFtZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmVhZCB0aGUgZmlsZSBhbmQgbG9vayBmb3IgbGlua3MgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcclxuXHRcdFx0XHRkYXRhLnNwbGl0KCdcXG4nKS5mb3JFYWNoKChsaW5lOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdGlmIChsaW5lLmluY2x1ZGVzKGBbWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1dYCkgfHwgbGluZS5pbmNsdWRlcyhgWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1gKSkge1xyXG5cdFx0XHRcdFx0XHQvLyBXZSBmb3VuZCBhIGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlIVxyXG5cdFx0XHRcdFx0XHRsaW5raW5nX2ZpbGVzLmFkZChwYXRoLnJlbGF0aXZlKGRpcmVjdG9yeSwgcGF0aC5qb2luKGRpciwgZmlsZSkpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gZmlsZWxpc3Q7XHJcblx0fTtcclxuXHJcblx0d2Fsa1N5bmModmF1bHRfcGF0aCwgW10pO1xyXG5cclxuXHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBhcmUgbWVudGlvbmluZyB0aGUgaW5wdXQgZmlsZVxyXG5cdHJldHVybiBsaW5raW5nX2ZpbGVzLnNpemU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rcyhmaWxlOiBURmlsZSk6IG51bWJlciB7XHJcbiAgICBjb25zdCB7IGFwcDogeyBtZXRhZGF0YUNhY2hlOiB7IHJlc29sdmVkTGlua3MgfSB9IH0gPSB0aGlzO1xyXG4gICAgY29uc3QgeyBwYXRoIH0gPSBmaWxlO1xyXG5cclxuICAgIGNvbnN0IHN1bUlubGlua3MgPSBPYmplY3QudmFsdWVzKHJlc29sdmVkTGlua3MpXHJcbiAgICAgICAgLm1hcCgodmFsOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9KSA9PiB2YWxbcGF0aF0gPz8gMClcclxuICAgICAgICAucmVkdWNlKChsZWZ0LCByaWdodCkgPT4gbGVmdCArIHJpZ2h0LCAwKTtcclxuXHJcbiAgICByZXR1cm4gc3VtSW5saW5rcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlQ291bnRNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+PiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHRcclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdFxyXG5cclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHRcclxuICAgIGNvbnN0IGZpbGVDb3VudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHJcblx0XHRjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG4gICAgICAgIH1cclxuXHRcdFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWxlQ291bnRNYXA7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxURmlsZVtdPiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkU3Vic3RyaW5nczogJHtleGNsdWRlZFN1YnN0cmluZ3N9YClcclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZEZvbGRlcnM6ICR7ZXhjbHVkZWRGb2xkZXJzfWApXHRcclxuICAgIGxldCBmaWxlQXJyYXk6IFRGaWxlW10gPSBbXTtcclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgZmlsZS5wYXRoOiAke2ZpbGUucGF0aH1gKVxyXG5cdFx0aWYgKCghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSB8fCBleGNsdWRlVGFnLmxlbmd0aCA9PT0gMCkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGUgJHtmaWxlfSBnZXQncyBhZGRlZC5gKVxyXG5cdFx0XHRmaWxlQXJyYXkucHVzaChmaWxlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaWxlQXJyYXk7XHJcbn07XHJcbiIsICJpbXBvcnQge1RGaWxlfSBmcm9tICdvYnNpZGlhbic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0Q3JlYXRlZEZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RDcmVhdGVkRmlsZTtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RNb2RpZmllZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RNb2RpZmllZEZpbGUuc3RhdC5tdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdE1vZGlmaWVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdE1vZGlmaWVkRmlsZTtcclxufSAgXHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdERhdGVGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdENyZWF0ZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5jdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vbnRoc0JldHdlZW4oc3RhcnRNb250aDogRGF0ZSwgZW5kTW9udGg6IERhdGUpOiBudW1iZXIge1xyXG5cdGxldCBtb250aHMgPSAoZW5kTW9udGguZ2V0TW9udGgoKSAtIHN0YXJ0TW9udGguZ2V0TW9udGgoKSkgKyAxO1xyXG5cdGlmIChlbmRNb250aC5nZXRGdWxsWWVhcigpID4gc3RhcnRNb250aC5nZXRGdWxsWWVhcigpKSB7XHJcblx0XHRtb250aHMgKz0gKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgLSBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpKjEyO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9udGhzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQuY3RpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQubXRpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhcnRGb3JtYXQoeV9heGlzOiBzdHJpbmcsIGNvdW50c1N0cmluZ01vZDogc3RyaW5nLCBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCBtb25hdHNiZWdyZW56dW5nID0gbnVsbFxyXG5cdGlmIChjaGFydFJlZHV6aWVydW5nTW9uYXRlID09IDApe1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IDBcclxuXHR9IGVsc2Uge1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IGNvdW50c1N0cmluZ01vZC5zcGxpdCgnLCcpLmxlbmd0aCAtIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHR9XHJcblx0XHJcblx0Ly9jb25zdCBtb25hdHNiZWdyZW56dW5nID0gbGVuZ3RoY291bnRzU3RyaW5nQ3JlYXRlIC0gdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlXHJcblx0cmV0dXJuIFwiYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtcIiArIHlfYXhpcyArIFwiXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IG1vZGlmaWVkXFxuICAgIGRhdGE6IFtcIiArIGNvdW50c1N0cmluZ01vZCArIFwiXVxcbnRlbnNpb246IDAuMlxcbndpZHRoOiA4MCAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG55VGl0bGU6IFxcXCJOdW1iZXIgb2YgTm90ZXNcXFwiXFxueFRpdGxlOiBcXFwiTW9udGhzXFxcIlxcbnhNaW46IFwiICsgbW9uYXRzYmVncmVuenVuZyArIFwiXFxuYGBgXCI7XHJcbn1cclxuXHJcbiAgXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQ2hhcnRDb250ZW50IChhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBuZXdDb250ZW50OiBzdHJpbmcpIHtcclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRpZiAobGluZSA9PT0gXCJeQ2hhcnRNb250aFwiKSB7XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmIChyZWZlcmVuY2UgIT0gbnVsbCl7XHJcblx0XHRlbmQgPSByZWZlcmVuY2U7XHJcblx0XHRzdGFydCA9IHJlZmVyZW5jZSAtIDE5O1xyXG5cdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdDb250ZW50LCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIGxldmVsOiBzdHJpbmc7XHJcbiAgfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSWZSZWNlaXZlQUJhZGdlKGxldmVsT2xkOiBudW1iZXIsIGxldmVsTmV3OiBudW1iZXIpOiBib29sZWFuIHtcclxuICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgbGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcbiAgZm9yIChsZXQgaT0wOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspe1xyXG4gICAgaWYgKGxldmVsT2xkIDwgYmFkZ2VMZXZlbHNbaV0gJiYgbGV2ZWxOZXcgPj0gYmFkZ2VMZXZlbHNbaV0pe1xyXG4gICAgICByZWNlaXZlQmFkZ2UgPSB0cnVlXHJcbiAgICB9IFxyXG4gIH1cclxuICByZXR1cm4gcmVjZWl2ZUJhZGdlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIsIGluZm9ybTogYm9vbGVhbik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiLCBsZXZlbDogXCJsZXZlbCA1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgLCBsZXZlbDogXCJsZXZlbCAyMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZSBPd2wgR3VydVwiLCBkZXNjcmlwdGlvbjogXCJXaG9vLWhvbyEgWW91J3ZlIGFjaGlldmVkICdXaXNlIE93bCBHdXJ1JyBzdGF0dXMuIFlvdXIgd2lzZG9tIGlzIGxlZ2VuZGFyeSwgYW5kIHlvdXIgaG9vdHMgb2Yga25vd2xlZGdlIGVjaG8gdGhyb3VnaCB0aGUgZm9yZXN0IG9mIGlnbm9yYW5jZSFcIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVpbnN0ZWluIEluY2FybmF0ZVwiLCBkZXNjcmlwdGlvbjogXCJFdXJla2EhIFlvdSd2ZSBiZWNvbWUgYW4gJ0VpbnN0ZWluIEluY2FybmF0ZSwnIHB1c2hpbmcgdGhlIGJvdW5kYXJpZXMgb2YgdW5kZXJzdGFuZGluZyBhbmQgYmVuZGluZyB0aGUgZmFicmljIG9mIGtub3dsZWRnZSB0byB5b3VyIHdpbGwhXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJNYXN0ZXJtaW5kIFNhZ2VcIiwgZGVzY3JpcHRpb246IFwiTWFnbmlmaWNlbnQhIFlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgcmFuayBvZiAnTWFzdGVybWluZCBTYWdlLCcgZ3VpZGluZyB0aGUgcml2ZXJzIG9mIGluZm9ybWF0aW9uIGFuZCBlbmxpZ2h0ZW5pbmcgYWxsIHdobyBzZWVrIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNlcmVicmFsIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQnJhdmlzc2ltbyEgWW91J3JlIG5vdyBhICdDZXJlYnJhbCBNYWVzdHJvLCcgY29uZHVjdGluZyB0aGUgc3ltcGhvbnkgb2Yga25vd2xlZGdlIHdpdGggdGhlIGZpbmVzc2Ugb2YgYSB2aXJ0dW9zbyBjb25kdWN0b3IhXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJaZW4gS25vd2xlZGdlIEtlZXBlclwiLCBkZXNjcmlwdGlvbjogXCJTZXJlbml0eSBhY2hpZXZlZCEgQXMgYSAnWmVuIEtub3dsZWRnZSBLZWVwZXIsJyB5b3UgbWFpbnRhaW4gYSB0cmFucXVpbCBtaW5kIHdoaWxlIG1hbmFnaW5nIHZhc3QgcG9vbHMgb2Yga25vd2xlZGdlIHdpdGggZ3JhY2UgYW5kIHBvaXNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkXCIsIGRlc2NyaXB0aW9uOiBcIkFsbCBoYWlsIHRoZSAnR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkIScgWW91IHdpZWxkIHRoZSBrbm93bGVkZ2Ugb2YgYWdlcyBhbmQgaG9sZCB0aGUga2V5cyB0byB1bmxvY2sgdGhlIGdhdGVzIG9mIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nXCIsIGRlc2NyaXB0aW9uOiBcIkNvbmdyYXR1bGF0aW9ucywgb2ggd2lzZSBvbmUhIFlvdSd2ZSBhdHRhaW5lZCB0aGUgaGlnaGVzdCBsZXZlbCBvZiBlbmxpZ2h0ZW5tZW50IGFzIHRoZSAnT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcuJyBZb3VyIHVuZGVyc3RhbmRpbmcga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciB3aXNkb20gaXMgYXMgdmFzdCBhcyB0aGUgY29zbW9zIGl0c2VsZiFcIiwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc1tpbmRleF1cclxuICB9XHJcbiAgXHJcblxyXG5cclxuICBleHBvcnQgIGZ1bmN0aW9uIGdldEJhZGdlRm9ySW5pdExldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbMCwgMywgNywgMTUsIDIzLCAzMCwgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzSW5pdDogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgU2Vla2VyIEluaXRpYXRlXCIsIGRlc2NyaXB0aW9uOiBcIldlbGNvbWUgdG8gdGhlIGpvdXJuZXkgb2Yga25vd2xlZGdlISBBcyBhICdMb3JlIFNlZWtlciBJbml0aWF0ZSwnIHlvdSd2ZSB0YWtlbiB5b3VyIGZpcnN0IHN0ZXBzIGludG8gdGhlIHdvcmxkIG9mIG9yZ2FuaXplZCB3aXNkb20uIFlvdXIgcXVlc3QgaGFzIGp1c3QgYmVndW4sIGFuZCB3aXRoIGVhY2ggbm90ZSB5b3UgbWFrZSwgeW91IGxheSB0aGUgZm91bmRhdGlvbiBmb3IgYSBmdXR1cmUgcmljaCB3aXRoIGluc2lnaHRzIGFuZCB1bmRlcnN0YW5kaW5nLiBZb3VyIGpvdXJuZXkgc3RhcnRzIGhlcmUsIGFuZCB0aGUgcGF0aCBhaGVhZCBpcyBmaWxsZWQgd2l0aCBwb3RlbnRpYWwgYW5kIGRpc2NvdmVyeS5cIiwgbGV2ZWw6IFwibGV2ZWwgMVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEFwcHJlbnRpY2VcIiwgZGVzY3JpcHRpb246IFwiWW91J3ZlIGhpdCB0aGUgZ3JvdW5kIHJ1bm5pbmcgd2l0aCB5b3VyIGV4aXN0aW5nIGtub3dsZWRnZSB0cmVhc3VyZXMhIFlvdSdyZSBhbHJlYWR5IGFuICdMb3JlIEFwcHJlbnRpY2UsJyBhcm1lZCB3aXRoIGEgd2VhbHRoIG9mIHdpc2RvbSBhbmQgcmVhZHkgdG8gc2hhcGUgaXQgZnVydGhlci5cIiwgbGV2ZWw6IFwibGV2ZWwgM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYXZ2eSBTY2hvbGFyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBnaXZlbiB5b3UgYSBoZWFkIHN0YXJ0ISBZb3UncmUgbm93IGEgJ1NhdnZ5IFNjaG9sYXIsJyBjb25maWRlbnRseSBkaXZpbmcgaW50byB0aGUgc2VhIG9mIGluZm9ybWF0aW9uIHdpdGggYSB0cmVhc3VyZSB0cm92ZSBvZiBpbnNpZ2h0cy5cIiAsIGxldmVsOiBcImxldmVsIDdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2FnZSdzIEZvdW5kYXRpb25cIiwgZGVzY3JpcHRpb246IFwiQnVpbGRpbmcgdXBvbiB5b3VyIHByZS1leGlzdGluZyBub3RlcywgeW91J3JlIGVzdGFibGlzaGluZyB0aGUgJ1NhZ2UncyBGb3VuZGF0aW9uJyBmb3IgYW4gZXZlbiBncmFuZGVyIGVkaWZpY2Ugb2Yga25vd2xlZGdlLiBZb3VyIGdyb3VuZHdvcmsgaXMgaW1wcmVzc2l2ZSFcIiAsIGxldmVsOiBcImxldmVsIDE1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2RvbSBTZWVkbGluZ1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbnVydHVyZWQgdGhlIGdyb3d0aCBvZiBhICdXaXNkb20gU2VlZGxpbmcuJyBZb3UncmUgY3VsdGl2YXRpbmcgeW91ciBnYXJkZW4gb2Yga25vd2xlZGdlIHdpdGggY2FyZSBhbmQgcGF0aWVuY2UuXCIgLCBsZXZlbDogXCJsZXZlbCAyM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJQcm9kaWdpb3VzIFByZXBhcmVyXCIsIGRlc2NyaXB0aW9uOiBcIlRoYW5rcyB0byB5b3VyIHByaW9yIGVmZm9ydHMsIHlvdSdyZSBhICdQcm9kaWdpb3VzIFByZXBhcmVyLCcgc3RhbmRpbmcgdGFsbCBhbW9uZyB5b3VyIG5vdGVzIGFuZCByZWFkeSB0byBjb25xdWVyIG5ldyByZWFsbXMgb2YgdW5kZXJzdGFuZGluZy5cIiAsIGxldmVsOiBcImxldmVsIDMwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVwaWMgRXBpcGhhbnkgRXhwbG9yZXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBwYXN0IG5vdGVzIGhhdmUgbGVkIHlvdSB0byB0aGUgZ3JhbmQgJ0VwaWMgRXBpcGhhbnkgRXhwbG9yZXInIHN0YXR1cyEgWW91J3ZlIGFscmVhZHkgYmVlbiBkb3duIGEgZmV3IHJhYmJpdCBob2xlcyBhbmQgY29tZSBvdXQgd2l0aCBkYXp6bGluZyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgTHVtaW5hcnlcIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIGlsbHVtaW5hdGluZyB5b3VyIHBhdGgsIHlvdSd2ZSBiZWNvbWUgYSAnTG9yZSBMdW1pbmFyeSwnIHNoaW5pbmcgbGlnaHQgb24gdGhlIG15c3RlcmllcyBvZiB0aGUgdW5pdmVyc2UsIG9uZSBpZGVhIGF0IGEgdGltZS5cIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjcmliZSBvZiB0aGUgQW5jaWVudHNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBtYXN0ZXJ5IG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYW5hZ2VtZW50IGhhcyBlbGV2YXRlZCB5b3UgdG8gdGhlIGVzdGVlbWVkIHJhbmsgb2YgdGhlICdTY3JpYmUgb2YgdGhlIEFuY2llbnRzLicgWW91ciBleGlzdGluZyBub3RlcyBoYXZlIHRyYW5zZm9ybWVkIGludG8gdHJlYXN1cmVzLCBicmlkZ2luZyB0aGUgZ2FwIGJldHdlZW4gb2xkIHdpc2RvbSBhbmQgbmV3IGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXVyZWthIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQXJtZWQgd2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzLCB5b3UncmUgdGhlICdFdXJla2EgTWFlc3RybywnIGNvbXBvc2luZyBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHdpdGggdGhlIG1lbG9keSBvZiBkaXNjb3ZlcnkuXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDaHJvbmljbGVzIENoYW1waW9uXCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBzdGFuZGluZyBhcyBhIHRlc3RhbWVudCwgeW91J3ZlIGFzY2VuZGVkIHRvIHRoZSBpbGx1c3RyaW91cyAnQ2hyb25pY2xlcyBDaGFtcGlvbicgbGV2ZWwuIFlvdXIgam91cm5leSB0aHJvdWdoIHRpbWUncyB0YXBlc3RyeSBoYXMgYnJvdWdodCBmb3J0aCBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHBhc3QgYW5kIHByZXNlbnQuXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXJcIiwgZGVzY3JpcHRpb246IFwiQXMgJ1RoZSBDdXJpb3VzIENhcnRvZ3JhcGhlciwnIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYXBwZWQgb3V0IHVuY2hhcnRlZCB0ZXJyaXRvcmllcyBvZiB1bmRlcnN0YW5kaW5nLiBZb3VyIGN1cmlvc2l0eSBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIG5vdGVzIGFyZSB0aGUgY29tcGFzcyBndWlkaW5nIHlvdXIgZXhwbG9yYXRpb24uXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTdWx0YW4gb2YgU3ludGhlc2lzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYWRlIHlvdSB0aGUgJ1N1bHRhbiBvZiBTeW50aGVzaXMuJyBZb3UncmUgdGhlIG1hc3RlciB3ZWF2ZXIsIHRocmVhZGluZyB0b2dldGhlciB0aHJlYWRzIG9mIGluZm9ybWF0aW9uIGludG8gYSByaWNoIHRhcGVzdHJ5IG9mIGluc2lnaHQuXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdGVybmFsIEFyY2hpdmlzdFwiLCBkZXNjcmlwdGlvbjogXCJBdCB0aGUgcGlubmFjbGUgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hc3RlcnksIHlvdSdyZSBub3cgcmV2ZXJlZCBhcyB0aGUgJ0V0ZXJuYWwgQXJjaGl2aXN0LicgWW91ciBleGlzdGluZyBub3RlcywgY2FyZWZ1bGx5IGN1cmF0ZWQgYW5kIG51cnR1cmVkLCBzdGFuZCBhcyBpbW1vcnRhbCBiZWFjb25zLCBndWlkaW5nIHNlZWtlcnMgdGhyb3VnaCB0aGUgbGFieXJpbnRoIG9mIGtub3dsZWRnZSBhY3Jvc3MgYWdlcy5cIiAsIGxldmVsOiBcImxldmVsIDEwMFwiIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc0luaXRbaW5kZXhdXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRXhhbXBsZSB1c2FnZTpcclxuICAvLyBjb25zdCBjdXJyZW50TGV2ZWwgPSA0MjsgLy8gUmVwbGFjZSB0aGlzIHdpdGggdGhlIGFjdHVhbCBwbGF5ZXIncyBsZXZlbFxyXG4gIC8vIGNvbnN0IGJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChjdXJyZW50TGV2ZWwpO1xyXG4gIC8vIGNvbnNvbGUubG9nKGBDb25ncmF0dWxhdGlvbnMhIFlvdSd2ZSByZWFjaGVkIExldmVsICR7Y3VycmVudExldmVsfS4gWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YCk7XHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4gICAgLypcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiIH0sXHJcbiAgICAgIC8vIEFkZCBtb3JlIGJhZGdlcyBoZXJlIGZvciBsZXZlbHMgNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIGFuZCAxMDBcclxuICAgICAgLy8gRXhhbXBsZTpcclxuICAgICAgLy8geyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgfSxcclxuICAgICAgLy8geyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiB9LFxyXG4gICAgICAvLyAuLi5hbmQgc28gb25cclxuICAgIF07XHJcbiAgXHJcbiAgICBjb25zdCBtYXhMZXZlbCA9MTAwOyAvLyBBc3N1bWluZyBlYWNoIGJhZGdlIGlzIGF3YXJkZWQgZXZlcnkgNSBsZXZlbHNcclxuICAgIGNvbnN0IGNhcHBlZExldmVsID0gTWF0aC5taW4obGV2ZWwsIG1heExldmVsKTtcclxuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihjYXBwZWRMZXZlbCAvIDUpIC0gMTtcclxuICAgIHJldHVybiBiYWRnZXNbaW5kZXhdO1xyXG4gIH1cclxuICBcclxuXHJcbiAgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgfVxyXG4gICovXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIExldmVsRGF0YSB7XHJcbiAgICBwb2ludHM6IG51bWJlcjtcclxuICAgIGxldmVsOiBudW1iZXI7XHJcbiAgICBwb2ludHNOZXh0OiBudW1iZXI7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbnN0IGxldmVsRGF0YTogTGV2ZWxEYXRhW10gPSBbXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDAsIHBvaW50c05leHQ6IDB9LFxyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAxLCBwb2ludHNOZXh0OiAxMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMCwgbGV2ZWw6IDIsIHBvaW50c05leHQ6IDMwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwLCBsZXZlbDogMywgcG9pbnRzTmV4dDogNzUwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAsIGxldmVsOiA0LCBwb2ludHNOZXh0OiAxNTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MDAwLCBsZXZlbDogNSwgcG9pbnRzTmV4dDogMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMCwgbGV2ZWw6IDYsIHBvaW50c05leHQ6IDUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTAwMDAsIGxldmVsOiA3LCBwb2ludHNOZXh0OiA4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgwMDAwLCBsZXZlbDogOCwgcG9pbnRzTmV4dDogMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIwMDAwLCBsZXZlbDogOSwgcG9pbnRzTmV4dDogMTcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTcwMDAwLCBsZXZlbDogMTAsIHBvaW50c05leHQ6IDIzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMDAwMCwgbGV2ZWw6IDExLCBwb2ludHNOZXh0OiAzMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAsIGxldmVsOiAxMiwgcG9pbnRzTmV4dDogMzgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzgwMDAwLCBsZXZlbDogMTMsIHBvaW50c05leHQ6IDQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3MDAwMCwgbGV2ZWw6IDE0LCBwb2ludHNOZXh0OiA2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDAwMDAsIGxldmVsOiAxNSwgcG9pbnRzTmV4dDogNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMDAwLCBsZXZlbDogMTYsIHBvaW50c05leHQ6IDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMDAwMCwgbGV2ZWw6IDE3LCBwb2ludHNOZXh0OiAxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTExMDAwMCwgbGV2ZWw6IDE4LCBwb2ludHNOZXh0OiAxMzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMyMDAwMCwgbGV2ZWw6IDE5LCBwb2ludHNOZXh0OiAxNTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTU1MDAwMCwgbGV2ZWw6IDIwLCBwb2ludHNOZXh0OiAxODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTgwMDAwMCwgbGV2ZWw6IDIxLCBwb2ludHNOZXh0OiAyMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjA3MDAwMCwgbGV2ZWw6IDIyLCBwb2ludHNOZXh0OiAyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjM2MDAwMCwgbGV2ZWw6IDIzLCBwb2ludHNOZXh0OiAyNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjY3MDAwMCwgbGV2ZWw6IDI0LCBwb2ludHNOZXh0OiAzMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwMCwgbGV2ZWw6IDI1LCBwb2ludHNOZXh0OiAzMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM1MDAwMCwgbGV2ZWw6IDI2LCBwb2ludHNOZXh0OiAzNzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzcyMDAwMCwgbGV2ZWw6IDI3LCBwb2ludHNOZXh0OiA0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDExMDAwMCwgbGV2ZWw6IDI4LCBwb2ludHNOZXh0OiA0NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUyMDAwMCwgbGV2ZWw6IDI5LCBwb2ludHNOZXh0OiA0OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDk1MDAwMCwgbGV2ZWw6IDMwLCBwb2ludHNOZXh0OiA1NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQwMDAwMCwgbGV2ZWw6IDMxLCBwb2ludHNOZXh0OiA1ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTg3MDAwMCwgbGV2ZWw6IDMyLCBwb2ludHNOZXh0OiA2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjM2MDAwMCwgbGV2ZWw6IDMzLCBwb2ludHNOZXh0OiA2ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjg3MDAwMCwgbGV2ZWw6IDM0LCBwb2ludHNOZXh0OiA3NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwMDAwMCwgbGV2ZWw6IDM1LCBwb2ludHNOZXh0OiA3OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzk1MDAwMCwgbGV2ZWw6IDM2LCBwb2ludHNOZXh0OiA4NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODUyMDAwMCwgbGV2ZWw6IDM3LCBwb2ludHNOZXh0OiA5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTExMDAwMCwgbGV2ZWw6IDM4LCBwb2ludHNOZXh0OiA5NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTcyMDAwMCwgbGV2ZWw6IDM5LCBwb2ludHNOZXh0OiAxMDM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMzUwMDAwLCBsZXZlbDogNDAsIHBvaW50c05leHQ6IDExMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTEwMDAwMDAsIGxldmVsOiA0MSwgcG9pbnRzTmV4dDogMTE2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTY3MDAwMCwgbGV2ZWw6IDQyLCBwb2ludHNOZXh0OiAxMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMzYwMDAwLCBsZXZlbDogNDMsIHBvaW50c05leHQ6IDEzMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMwNzAwMDAsIGxldmVsOiA0NCwgcG9pbnRzTmV4dDogMTM4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzgwMDAwMCwgbGV2ZWw6IDQ1LCBwb2ludHNOZXh0OiAxNDU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE0NTUwMDAwLCBsZXZlbDogNDYsIHBvaW50c05leHQ6IDE1MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUzMjAwMDAsIGxldmVsOiA0NywgcG9pbnRzTmV4dDogMTYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjExMDAwMCwgbGV2ZWw6IDQ4LCBwb2ludHNOZXh0OiAxNjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2OTIwMDAwLCBsZXZlbDogNDksIHBvaW50c05leHQ6IDE3NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTc3NTAwMDAsIGxldmVsOiA1MCwgcG9pbnRzTmV4dDogMTg2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODYwMDAwMCwgbGV2ZWw6IDUxLCBwb2ludHNOZXh0OiAxOTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE5NDcwMDAwLCBsZXZlbDogNTIsIHBvaW50c05leHQ6IDIwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjAzNjAwMDAsIGxldmVsOiA1MywgcG9pbnRzTmV4dDogMjEyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMTI3MDAwMCwgbGV2ZWw6IDU0LCBwb2ludHNOZXh0OiAyMjIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIyMjAwMDAwLCBsZXZlbDogNTUsIHBvaW50c05leHQ6IDIzMTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMxNTAwMDAsIGxldmVsOiA1NiwgcG9pbnRzTmV4dDogMjQxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNDEyMDAwMCwgbGV2ZWw6IDU3LCBwb2ludHNOZXh0OiAyNTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI1MTEwMDAwLCBsZXZlbDogNTgsIHBvaW50c05leHQ6IDI2MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjYxMjAwMDAsIGxldmVsOiA1OSwgcG9pbnRzTmV4dDogMjcxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNzE1MDAwMCwgbGV2ZWw6IDYwLCBwb2ludHNOZXh0OiAyODIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI4MjAwMDAwLCBsZXZlbDogNjEsIHBvaW50c05leHQ6IDI5MjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjkyNzAwMDAsIGxldmVsOiA2MiwgcG9pbnRzTmV4dDogMzAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDM2MDAwMCwgbGV2ZWw6IDYzLCBwb2ludHNOZXh0OiAzMTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMxNDcwMDAwLCBsZXZlbDogNjQsIHBvaW50c05leHQ6IDMyNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzI2MDAwMDAsIGxldmVsOiA2NSwgcG9pbnRzTmV4dDogMzM3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzc1MDAwMCwgbGV2ZWw6IDY2LCBwb2ludHNOZXh0OiAzNDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM0OTIwMDAwLCBsZXZlbDogNjcsIHBvaW50c05leHQ6IDM2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzYxMTAwMDAsIGxldmVsOiA2OCwgcG9pbnRzTmV4dDogMzczMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzMyMDAwMCwgbGV2ZWw6IDY5LCBwb2ludHNOZXh0OiAzODU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4NTUwMDAwLCBsZXZlbDogNzAsIHBvaW50c05leHQ6IDM5ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzk4MDAwMDAsIGxldmVsOiA3MSwgcG9pbnRzTmV4dDogNDEwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTA3MDAwMCwgbGV2ZWw6IDcyLCBwb2ludHNOZXh0OiA0MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQyMzYwMDAwLCBsZXZlbDogNzMsIHBvaW50c05leHQ6IDQzNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDM2NzAwMDAsIGxldmVsOiA3NCwgcG9pbnRzTmV4dDogNDUwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTAwMDAwMCwgbGV2ZWw6IDc1LCBwb2ludHNOZXh0OiA0NjM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ2MzUwMDAwLCBsZXZlbDogNzYsIHBvaW50c05leHQ6IDQ3NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDc3MjAwMDAsIGxldmVsOiA3NywgcG9pbnRzTmV4dDogNDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTExMDAwMCwgbGV2ZWw6IDc4LCBwb2ludHNOZXh0OiA1MDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwNTIwMDAwLCBsZXZlbDogNzksIHBvaW50c05leHQ6IDUxOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTE5NTAwMDAsIGxldmVsOiA4MCwgcG9pbnRzTmV4dDogNTM0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MzQwMDAwMCwgbGV2ZWw6IDgxLCBwb2ludHNOZXh0OiA1NDg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0ODcwMDAwLCBsZXZlbDogODIsIHBvaW50c05leHQ6IDU2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTYzNjAwMDAsIGxldmVsOiA4MywgcG9pbnRzTmV4dDogNTc4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1Nzg3MDAwMCwgbGV2ZWw6IDg0LCBwb2ludHNOZXh0OiA1OTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU5NDAwMDAwLCBsZXZlbDogODUsIHBvaW50c05leHQ6IDYwOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjA5NTAwMDAsIGxldmVsOiA4NiwgcG9pbnRzTmV4dDogNjI1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MjUyMDAwMCwgbGV2ZWw6IDg3LCBwb2ludHNOZXh0OiA2NDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY0MTEwMDAwLCBsZXZlbDogODgsIHBvaW50c05leHQ6IDY1NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjU3MjAwMDAsIGxldmVsOiA4OSwgcG9pbnRzTmV4dDogNjczNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NzM1MDAwMCwgbGV2ZWw6IDkwLCBwb2ludHNOZXh0OiA2OTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY5MDAwMDAwLCBsZXZlbDogOTEsIHBvaW50c05leHQ6IDcwNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzA2NzAwMDAsIGxldmVsOiA5MiwgcG9pbnRzTmV4dDogNzIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MjM2MDAwMCwgbGV2ZWw6IDkzLCBwb2ludHNOZXh0OiA3NDA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDcwMDAwLCBsZXZlbDogOTQsIHBvaW50c05leHQ6IDc1ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzU4MDAwMDAsIGxldmVsOiA5NSwgcG9pbnRzTmV4dDogNzc1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NzU1MDAwMCwgbGV2ZWw6IDk2LCBwb2ludHNOZXh0OiA3OTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5MzIwMDAwLCBsZXZlbDogOTcsIHBvaW50c05leHQ6IDgxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODExMTAwMDAsIGxldmVsOiA5OCwgcG9pbnRzTmV4dDogODI5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MjkyMDAwMCwgbGV2ZWw6IDk5LCBwb2ludHNOZXh0OiA4NDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg0NzUwMDAwLCBsZXZlbDogMTAwLCBwb2ludHNOZXh0OiA4NjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg2NjAwMDAwLCBsZXZlbDogMTAxLCBwb2ludHNOZXh0OiA4ODQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg4NDcwMDAwLCBsZXZlbDogMTAyLCBwb2ludHNOZXh0OiA5MDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkwMzYwMDAwLCBsZXZlbDogMTAzLCBwb2ludHNOZXh0OiA5MjI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMjcwMDAwLCBsZXZlbDogMTA0LCBwb2ludHNOZXh0OiA5NDIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk0MjAwMDAwLCBsZXZlbDogMTA1LCBwb2ludHNOZXh0OiA5NjE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk2MTUwMDAwLCBsZXZlbDogMTA2LCBwb2ludHNOZXh0OiA5ODEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk4MTIwMDAwLCBsZXZlbDogMTA3LCBwb2ludHNOZXh0OiAxMDAxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAxMTAwMDAsIGxldmVsOiAxMDgsIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMjEyMDAwMCwgbGV2ZWw6IDEwOSwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTA0MTUwMDAwLCBsZXZlbDogMTEwLCBwb2ludHNOZXh0OiAxMDYxNTAwMDAgfSxcclxuICBdO1xyXG4gIFxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRMZXZlbEZvclBvaW50cyhwb2ludHM6IG51bWJlcik6IExldmVsRGF0YSB7XHJcbiAgICBsZXQgbGV2ZWwgOkxldmVsRGF0YSA9IGxldmVsRGF0YVswXTtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHBvaW50cyA+PSBkYXRhLnBvaW50cykge1xyXG4gICAgICAgIGxldmVsID0gZGF0YTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxldmVsO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c1BvaW50c0ZvckxldmVsKHRhcmdldExldmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHN0YXR1c1BvaW50cyA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmICh0YXJnZXRMZXZlbCA9PSBkYXRhLmxldmVsICYmIHN0YXR1c1BvaW50cyA9PSAwKSB7XHJcbiAgICAgICAgc3RhdHVzUG9pbnRzID0gZGF0YS5wb2ludHM7XHJcbiAgICAgIH0gXHJcbiAgICB9XHJcblxyXG5cdFx0XHJcblx0XHRyZXR1cm4gc3RhdHVzUG9pbnRzXHJcbiAgfVxyXG4gIFxyXG5cclxuLypcclxuY29uc3QgcG9pbnRzID0gNTUwMDtcclxuY29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhwb2ludHMpO1xyXG5jb25zb2xlLmxvZyhgV2l0aCAke3BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsfS5gKTtcclxuKi8iLCAiY29uc3QgbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2U6IHN0cmluZ1tdID0gW1xyXG5cdFwiU2V2ZW4gZGF5cyBvZiBub3RlLXRha2luZz8gWW91J3JlIHByYWN0aWNhbGx5IGEgbm90ZSBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBmaWVzdGEhIFx1RDgzQ1x1REY4OVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBwYXJ0eSBnb2luZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0gWW91J3JlIGxpa2UgdGhlIEphbWVzIEJvbmQgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REQ3Nlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzZWNyZXQgYWdlbnQhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhICdOb3RlLUEtRGF5JyBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXBlcyBvcHRpb25hbCFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3ZlIHByYWN0aWNhbGx5IHdyaXR0ZW4gYSBtaW5pIG5vdmVsIGJ5IG5vdyEgXHVEODNEXHVEQ0RBXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGF1dGhvciBzdGF0dXMgYWNoaWV2ZWQhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFVzYWluIEJvbHQgb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzcHJpbnRpbmcgdG93YXJkcyBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc3ByZWUhIEl0J3MgbGlrZSBhIG5vdGVzLXBsb3Npb24hIFx1RDgzRFx1RENBNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBmaXJld29ya3MgY29taW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYmFzaWNhbGx5IHRoZSBNaWNoYWVsIEpvcmRhbiBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNsYW0gZHVuayFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNVlAhIFx1RDgzQ1x1REZDNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNjb3JpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgJ1NldmVuIERheSBOb3RlIEZldmVyJyBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhdGNoIHRoZSBmZXZlciFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGphbW1pbichXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgbWFnaWMgc2hvdyEgTm93IHlvdSBzZWUgdGhlIG5vdGVzLCBub3cgeW91IGRvbid0ISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cywga2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBsaWtlIGEgbm90ZS10YWtpbmcgSmVkaSBNYXN0ZXIhIFx1RDgzQ1x1REYwQ1x1MjY5NFx1RkUwRiBbWF0gcG9pbnRzLCBtYXkgdGhlIG5vdGVzIGJlIHdpdGggeW91IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNYWNHeXZlciwgdHVybmluZyBpbmZvcm1hdGlvbiBpbnRvIHNvbHV0aW9ucyEgXHVEODNEXHVERDI3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY3JhZnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBjaGVmLCBjb29raW5nIHVwIGEga25vd2xlZGdlIGZlYXN0ISBcdUQ4M0NcdURGNzNcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjb29raW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQwXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTGV3aXMgYW5kIENsYXJrLCBjaGFydGluZyBuZXcgdGVycml0b3JpZXMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURERkFcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGRldGVjdGl2ZSwgc29sdmluZyBjYXNlcyBvZiBjdXJpb3NpdHkhIFx1RDgzRFx1REQ3NVx1RkUwRlx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGRldGVjdGluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHBpb25lZXIsIGJsYXppbmcgdHJhaWxzIHRocm91Z2ggdGhlIGZvcmVzdHMgb2YgaW5mb3JtYXRpb24hIFx1RDgzQ1x1REYzMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBpb25lZXJpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCJcclxuXTtcclxuXHJcbmNvbnN0IHR3b05vdGVNZXNzYWdlczogc3RyaW5nW10gPSBbXHJcblx0XCJCb29tISBZb3UganVzdCBhY2VkIHRoZSAyLW5vdGUgdGFuZ28hIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgZ3Jvb3ZpbichXCIsXHJcblx0XCJUd28gbm90ZXMgaW4gYSBkYXk/IFlvdSdyZSBvZmZpY2lhbGx5IGEgTm90ZSBOaW5qYSEgXHVEODNFXHVERDRCIFtYXSBwb2ludHMgZWFybmVkLiBSb2NrIG9uIVwiLFxyXG5cdFwiSGlnaC1maXZlISBZb3UndmUgY29ucXVlcmVkIHRoZSAyLW5vdGUgcm9kZW8hIFx1RDgzRVx1REQyMCBbWF0gcG9pbnRzIGVhcm5lZC4gWWVlaGF3IVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUhIFR3byBub3RlcyBpbiBvbmUgZGF5LCB5b3UgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgVHdvIG5vdGVzIGluIGEgZGF5IC0gd2hhdCdzIHlvdXIgc2VjcmV0IHdlYXBvbj8gXHVEODNEXHVERDI1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJLYWJvb20hIFlvdSBqdXN0IGJsZXcgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSB3YXRlciEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhIDItbm90ZSBzdXBlcnN0YXIhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGluIHRoZSBiYWcuIEtlZXAgc2hpbmluZyFcIixcclxuXHRcIkRvdWJsZSB1cCwgZG91YmxlIGRvd24hIFR3byBub3RlcyBpbiBvbmUgZGF5IC0geW91J3JlIGEgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgcGFydHkhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiS2EtY2hpbmchIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIHJhY2tpbmcgdXAgdGhvc2UgcG9pbnRzISBcdUQ4M0RcdURDQjAgW1hdIGVhcm5lZCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWdpY2lhbiEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHRyaWNrP1wiLFxyXG5cdFwiVHdvIG5vdGVzPyBOYWlsZWQgaXQhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCBnb2luZyFcIixcclxuXHRcIkFicmEtY2FkYWJyYSEgVHdvIG5vdGVzIGFwcGVhciEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlLCBkb3VibGUgdGhlIGZ1biEgVHdvIG5vdGVzIGluIG9uZSBkYXkhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgZmllc3RhISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYXBvdyEgVHdvIG5vdGVzIGluIGEgZGF5IC0geW91J3JlIGEgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEYgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBhZHZlbnR1cmU/XCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCJcclxuXTtcclxuXHJcbmNvbnN0IHJhbmRvbVBvaW50Tm90aWNlczogc3RyaW5nW10gPSBbXHJcblx0XCJCYXppbmdhISBZb3UganVzdCBzbmFnZ2VkIFtYXSBwb2ludHMhXCIsXHJcblx0XCJLYWJvb20hIFtYXSBwb2ludHMgYXJlIG5vdyBpbiB5b3VyIHBvY2tldCFcIixcclxuXHRcIldvb2hvbyEgW1hdIHBvaW50cyBlYXJuZWQhIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJQb2ludHMgYWhveSEgW1hdIG1vcmUgaW4gdGhlIGJhbmshXCIsXHJcblx0XCJTY29yZSEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHRvdGFsIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlppcHBpdHktemFwISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJDaGFtcGlvbiBtb3ZlISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIkJpbmdvISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIlNoYXphbSEgW1hdIHBvaW50cyB0byB0aGUgcmVzY3VlIVwiLFxyXG5cdFwiS2EtY2hpbmchIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkJyYXZvISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJXZWxsIGRvbmUhIFtYXSBtb3JlIHBvaW50cyBpbiB0b3chXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMsIGp1c3QgbGlrZSB0aGF0IVwiLFxyXG5cdFwiQSByb3VuZCBvZiBhcHBsYXVzZSBmb3IgW1hdIHBvaW50cyFcIixcclxuXHRcIldob29zaCEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJXb28hIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJHcmVhdCBqb2IhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiRmFudGFzdGljISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJIb29yYXkhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiTmljZSBvbmUhIFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldCFcIixcclxuXHRcIldvb3Qgd29vdCEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQmFtISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJDb29sIGJlYW5zISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIlNwbGVuZGlkISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJNYXJ2ZWxvdXMhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFueSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiRXhxdWlzaXRlISBbWF0gcG9pbnRzIGluIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJPdXRzdGFuZGluZyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugam9iIVwiLFxyXG5cdFwiTWFnbmlmaWNlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJUZXJyaWZpYyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiRXhjZWxsZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJBd2Vzb21lISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJXZWxsIHBsYXllZCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIkltcHJlc3NpdmUhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCcmlsbGlhbnQhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk5pY2UgbW92ZSEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiU3RlbGxhciEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJXZWxsIGRlc2VydmVkISBbWF0gcG9pbnRzIGVhcm5lZCFcIlxyXG5dO1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlVHdvTm90ZUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0d29Ob3RlTWVzc2FnZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gdHdvTm90ZU1lc3NhZ2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlUG9pbnRzKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHJhbmRvbVBvaW50Tm90aWNlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSByYW5kb21Qb2ludE5vdGljZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG4vLyBFeGFtcGxlIHVzYWdlXHJcbi8vIGNvbnN0IHJhbmRvbVBvaW50cyA9IDEwMDsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIHBvaW50cyB2YWx1ZVxyXG4vLyBjb25zdCByYW5kb21NZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShyYW5kb21Qb2ludHMpO1xyXG4vLyBjb25zb2xlLmxvZyhyYW5kb21NZXNzYWdlKTtcclxuXHJcblxyXG4iXSwKICAi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LElBQU0sMkJBQTJCO0FBQ2pDLElBQU0sb0JBQXFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNIbEMsU0FBb0I7QUFDcEIsV0FBc0I7QUFFZixTQUFTLDZCQUE2QixnQkFBd0IsYUFBcUIsYUFBNkI7QUFDdEgsUUFBTSxnQkFBZ0IsY0FBYyxNQUFN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LElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxJQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLEtBQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDbkQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN0RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFDekQ7QUFFTyxTQUFTLGtCQUFrQixRQUEyQjtBQUMzRCxNQUFJLFFBQW1CLFVBQVUsQ0FBQztBQUNsQyxhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLFVBQVUsS0FBSyxRQUFRO0FBQ3pCLGNBQVE7QUFBQSxJQUNWLE9BQU87QUFDTDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBRU8sU0FBUyxxQkFBcUIsYUFBNkI7QUFDaEUsTUFBSSxlQUFlO0FBQ25CLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksZUFBZSxLQUFLLFNBQVMsZ0JBQWdCLEdBQUc7QUFDbEQscUJBQWUsS0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUdGLFNBQU87QUFDUDs7O0FDOUlGLElBQU0sMEJBQW9DO0FBQUEsRUFDekM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLGtCQUE0QjtBQUFBLEVBQ2pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLHFCQUErQjtBQUFBLEVBQ3BDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBR08sU0FBUyxnQ0FBZ0MsUUFBd0I7QUFDdkUsUUFBTSxjQUFjLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSx3QkFBd0IsTUFBTTtBQUM3RSxRQUFNLFVBQVUsd0JBQXdCLFdBQVc7QUFDbkQs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RDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDAuMSlcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgY3JlYXRlZC5gKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpO1xyXG5cdFx0fSBlbHNlIGlmIChpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0Ly8gZG8gbm90aGluZ1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgbm90ZSBjcmVhdGlvbiB3YXMgcmF0ZWQgYWxyZWFkeSB0b2RheS5gKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IDE7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpIHtcclxuXHRcdGxldCBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzID0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0aWYgKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPCA3KSB7XHJcblx0XHRcdGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMrKztcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXM7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblxyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24oY3VycmVudFdlZWtseUNyZWF0ZWROb3Rlcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24obmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyKSB7XHJcblx0XHRpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA8PSA2KSB7XHJcblx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9IGVsc2UgaWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPT0gNykge1xyXG5cdFx0XHR0aGlzLmluY3JlYXNlU3RyZWFrYm9vc3RlcigxKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UpXHJcblx0XHRcdGNvbnNvbGUubG9nKGBXZWVrbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwXHJcblx0XHRjb25zdCBiYXJMZW5ndGggPSBNYXRoLnJvdW5kKHByb2dyZXNzYmFyUGVyY2VudCAvIGNoYXJOdW1Qcm9ncmVzc2JhcilcclxuXHRcdHN0YXR1c2Jhci5zZXRUZXh0KGBcdUQ4M0NcdURGQjJ8bHZsOiAke3RoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWx9IHwgJHt0aGlzLmNyZWF0ZVByb2dyZXNzYmFyKGNoYXJOdW1Qcm9ncmVzc2JhciwgYmFyTGVuZ3RoKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyICs9IGluY3JlYXNlVmFsdWVcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC09IGRlY3JlYXNlVmFsdWVcclxuXHRcdGlmIChuZXdWYWx1ZSA8IDApe1xyXG5cdFx0XHRuZXdWYWx1ZSA9IDBcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0fVxyXG5cclxuXHJcblxyXG5cclxuXHRhc3luYyB1cGRhdGVBdmF0YXJQYWdlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdC8vY29uc29sZS5sb2coYGN1cnJlbnQgc3RhdHVzUG9pbnRzOiAke3RoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzfWApXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKicgKyB0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayArICcvMioqICAgfCc7XHJcblx0XHRjb25zdCBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gOiBudW1iZXIgPSA3IC0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0Y29uc3Qgd2Vla2x5Q2hhbGxlbmdlID0gJ3wgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKicgKyB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgKyAnLzcqKiAgIHxcXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW2RheXMgZG9uZSBpbiBhIHJvd11cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XFxuICAgIGRhdGE6IFsnICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgZGF5c0xlZnRJbldlZWtseUNoYWluICsgJ11cXG54TWluOiAwXFxueE1heDogN1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCc7XHJcblxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCAmJiByZWZlcmVuY2UzICE9IG51bGwpe1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSAtIDI7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI0O1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyIC0gMSAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQzID0gcmVmZXJlbmNlMyAtIDEgLTI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDMgPSByZWZlcmVuY2UzICsgMjQgLTI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblxyXG5cclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdQb2ludHNTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgZGFpbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMzID0gWy4uLm5ld0xpbmVzMi5zbGljZSgwLCBzdGFydDMpLCB3ZWVrbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzMi5zbGljZShlbmQzKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJBbGl2ZTogZmFsc2UsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElTZXR0aW5ncyB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIGJpbmRUYWI6IGJvb2xlYW47XG4gIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgbnVtQWxsRmlsZXM6IG51bWJlcjtcbiAgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHN0YXR1c1BvaW50czogbnVtYmVyO1xuICBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBkZWJ1ZzogYm9vbGVhbjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuICBzdHJlYWtib29zdGVyQWxpdmU6IGJvb2xlYW47XG59XG5cblxuZXhwb3J0IGNsYXNzIEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBnYW1pZmljYXRpb247XG4gIFxuICBwdWJsaWMgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kVGFiOiBib29sZWFuO1xuICBwdWJsaWMgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgcHVibGljIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIHB1YmxpYyBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIHB1YmxpYyBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHB1YmxpYyB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgcHVibGljIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBwdWJsaWMgZGVidWc6IGJvb2xlYW47XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlckFsaXZlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUFBLEVBQ2Ysb0JBQW9CO0FBQ3RCO0FBOEJPLElBQU0sNkJBQU4sY0FBeUMsaUNBQWlCO0FBQUEsRUE0QmhFLFlBQVlDLE1BQVUsUUFBc0I7QUFDMUMsVUFBTUEsTUFBSyxNQUFNO0FBQ2pCLFNBQUssU0FBUztBQUFBLEVBQ2hCO0FBQUEsRUFFTyxVQUFnQjtBQUN0QixVQUFNLEVBQUUsWUFBWSxJQUFJO0FBQ3hCLGdCQUFZLFNBQVMscUJBQXFCO0FBQzFDLFNBQUssWUFBWSxNQUFNO0FBRXZCLFVBQU0sWUFBWSxZQUFZLFVBQVUsUUFBUTtBQUNoRCxjQUFVLFNBQVMsZUFBZTtBQUNsQyxVQUFNLGFBQWEsVUFBVSxTQUFTLEtBQUs7QUFBQSxNQUMzQyxNQUFNO0FBQUEsSUFDTixDQUFDO0FBQ0QsVUFBTSxZQUFZLFdBQVcsU0FBUyxPQUFPO0FBQUEsTUFDN0MsTUFBTTtBQUFBLFFBQ0wsS0FBSztBQUFBLE1BQ047QUFBQSxJQUNBLENBQUM7QUFDRCxjQUFVLFNBQVM7QUFLbkIsZ0JBQVksU0FBUyxNQUFNLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxZQUFRLElBQUksaUJBQWlCO0FBQzdCLFFBQUksd0JBQVEsV0FBVyxFQUNyQixRQUFRLGlCQUFpQixFQUN6QixRQUFRLG9FQUFvRSxFQUM1RSxRQUFRLFVBQVEsS0FDZixlQUFlLHNDQUFpQyxFQUNoRCxTQUFTLEtBQUssT0FBTyxTQUFTLFdBQVcsRUFDekMsU0FBUyxPQUFPLFVBQVU7QUFDMUIsV0FBSyxPQUFPLFNBQVMsY0FBYztBQUNuQyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDaEMsQ0FBQyxDQUFDO0FBR0osUUFBSSx3QkFBUSxXQUFXLEVBQ3JCLFFBQVEsa0JBQWtCLEVBQzFCLFFBQVEsbUVBQW1FLEVBQzNFLFFBQVEsVUFBUSxLQUNmLGVBQWUscUNBQWdDLEVBQy9DLFNBQVMsS0FBSyxPQUFPLFNBQVMsYUFBYSxFQUMzQyxTQUFTLE9BQU8sVUFBVTtBQUUxQixXQUFLLE9BQU8sU0FBUyxnQkFBZ0I7QUFDckMsWUFBTSxLQUFLLE9BQU8sYUFBYTtBQUFBLElBQ2hDLENBQUMsQ0FBQztBQUVKLFFBQUksd0JBQVEsV0FBVyxFQUNyQixRQUFRLG1CQUFtQixFQUMzQixRQUFRLGdFQUFnRSxFQUN4RSxRQUFRLFVBQVEsS0FDZCxlQUFlLE1BQU0sRUFDckIsU0FBUyxLQUFLLE9BQU8sU0FBUyxjQUFjLEVBQzVDLFNBQVMsT0FBTyxVQUFVO0FBRTFCLFdBQUssT0FBTyxTQUFTLGlCQUFpQjtBQUN0QyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDakMsQ0FBQyxDQUFDO0FBRUYsZ0JBQVksU0FBUyxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxRQUFJLHdCQUFRLFdBQVcsRUFDckIsUUFBUSxzQkFBc0IsRUFDOUIsUUFBUSx3RkFBd0YsRUFDaEc7QUFBQSxNQUFVLENBQUMsV0FDWCxPQUNTLFNBQVMsS0FBSyxPQUFPLFNBQVMsaUJBQWlCLEVBQ2hELFNBQVMsQ0FBQyxVQUFVO0FBQ2pCLGFBQUssT0FBTyxTQUFTLG9CQUFvQjtBQUN6QyxhQUFLLE9BQU8sU0FBUyxLQUFLLE9BQU8sUUFBUTtBQUFBLE1BQzNDLENBQUM7QUFBQSxJQUNYO0FBR0QsUUFBSSx3QkFBUSxXQUFXLEVBQ3JCLFFBQVEsK0RBQStELEtBQUssT0FBTyxTQUFTLGNBQWMsRUFDMUcsUUFBUSw4RUFBOEUsRUFDdEYsUUFBUSxVQUFRLEtBQ2QsZUFBZSx5QkFBeUIsRUFDeEMsU0FBUyxLQUFLLE9BQU8sU0FBUyx1QkFBdUIsU0FBUyxDQUFDLEVBQy9ELFNBQVMsT0FBTyxVQUFVO0FBQzFCLFdBQUssT0FBTyxTQUFTLHlCQUF5QixTQUFTLEtBQUs7QUFDNUQsWUFBTSxLQUFLLE9BQU8sYUFBYTtBQUFBLElBQ2pDLENBQUMsQ0FBQztBQUlKLFFBQUksd0JBQVEsV0FBVyxFQUNyQixRQUFRLDJCQUEyQixFQUNuQyxRQUFRLDREQUE0RCxFQUNwRSxRQUFRLFVBQVEsS0FDZCxlQUFlLHVCQUF1QixFQUN0QyxTQUFTLEtBQUssT0FBTyxTQUFTLG9CQUFvQixFQUNsRCxTQUFTLE9BQU8sVUFBVTtBQUUxQixXQUFLLE9BQU8sU0FBUyx1QkFBdUI7QUFDNUMsWUFBTSxLQUFLLE9BQU8sYUFBYTtBQUFBLElBQ2pDLENBQUMsQ0FBQyxFQUNGLFFBQVEsVUFBUSxLQUNkLGVBQWUsdUJBQXVCLEVBQ3RDLFNBQVMsS0FBSyxPQUFPLFNBQVMsb0JBQW9CLEVBQ2xELFNBQVMsT0FBTyxVQUFVO0FBRTFCLFdBQUssT0FBTyxTQUFTLHVCQUF1QjtBQUM1QyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDbEMsQ0FBQyxDQUFDO0FBQUEsRUFFSjtBQUNDOzs7QUNyTWEsU0FBUixRQUF5QixLQUFLO0FBQ25DO0FBRUEsU0FBTyxVQUFVLGNBQWMsT0FBTyxVQUFVLFlBQVksT0FBTyxPQUFPLFdBQVcsU0FBVUMsTUFBSztBQUNsRyxXQUFPLE9BQU9BO0FBQUEsRUFDaEIsSUFBSSxTQUFVQSxNQUFLO0FBQ2pCLFdBQU9BLFFBQU8sY0FBYyxPQUFPLFVBQVVBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxFQUMxSCxHQUFHLFFBQVEsR0FBRztBQUNoQjs7O0FDUmUsU0FBUixhQUE4QixVQUFVLE1BQU07QUFDbkQsTUFBSSxLQUFLLFNBQVMsVUFBVTtBQUMxQixVQUFNLElBQUksVUFBVSxXQUFXLGVBQWUsV0FBVyxJQUFJLE1BQU0sTUFBTSx5QkFBeUIsS0FBSyxTQUFTLFVBQVU7QUFBQSxFQUM1SDtBQUNGOzs7QUM4QmUsU0FBUixPQUF3QixPQUFPO0FBQ3BDLGVBQWEsR0FBRyxTQUFTO0FBQ3pCLFNBQU8saUJBQWlCLFFBQVEsUUFBUSxLQUFLLE1BQU0sWUFBWSxPQUFPLFVBQVUsU0FBUyxLQUFLLEtBQUssTUFBTTtBQUMzRzs7O0FDTGUsU0FBUixPQUF3QixVQUFVO0FBQ3ZDLGVBQWEsR0FBRyxTQUFTO0FBQ3pCLE1BQUksU0FBUyxPQUFPLFVBQVUsU0FBUyxLQUFLLFFBQVE7QUFHcEQsTUFBSSxvQkFBb0IsUUFBUSxRQUFRLFFBQVEsTUFBTSxZQUFZLFdBQVcsaUJBQWlCO0FBRTVGLFdBQU8sSUFBSSxLQUFLLFNBQVMsUUFBUSxDQUFDO0FBQUEsRUFDcEMsV0FBVyxPQUFPLGFBQWEsWUFBWSxXQUFXLG1CQUFtQjtBQUN2RSxXQUFPLElBQUksS0FBSyxRQUFRO0FBQUEsRUFDMUIsT0FBTztBQUNMLFNBQUssT0FBTyxhQUFhLFlBQVksV0FBVyxzQkFBc0IsT0FBTyxZQUFZLGFBQWE7QUFFcEcsY0FBUSxLQUFLLG9OQUFvTjtBQUVqTyxjQUFRLEtBQUssSUFBSSxNQUFNLEVBQUUsS0FBSztBQUFBLElBQ2hDO0FBQ0EsV0FBTyxJQUFJLEtBQUssR0FBRztBQUFBLEVBQ3JCO0FBQ0Y7OztBQ2pCZSxTQUFSLFFBQXlCLFdBQVc7QUFDekMsZUFBYSxHQUFHLFNBQVM7QUFDekIsTUFBSSxDQUFDLE9BQU8sU0FBUyxLQUFLLE9BQU8sY0FBYyxVQUFVO0FBQ3ZELFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxPQUFPLE9BQU8sU0FBUztBQUMzQixTQUFPLENBQUMsTUFBTSxPQUFPLElBQUksQ0FBQztBQUM1Qjs7O0FDekNlLFNBQVIsVUFBMkIsYUFBYTtBQUM3QyxNQUFJLGdCQUFnQixRQUFRLGdCQUFnQixRQUFRLGdCQUFnQixPQUFPO0FBQ3pFLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxTQUFTLE9BQU8sV0FBVztBQUMvQixNQUFJLE1BQU0sTUFBTSxHQUFHO0FBQ2pCLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxTQUFTLElBQUksS0FBSyxLQUFLLE1BQU0sSUFBSSxLQUFLLE1BQU0sTUFBTTtBQUMzRDs7O0FDWWUsU0FBUixnQkFBaUMsV0FBVyxhQUFhO0FBQzlELGVBQWEsR0FBRyxTQUFTO0FBQ3pCLE1BQUksWUFBWSxPQUFPLFNBQVMsRUFBRSxRQUFRO0FBQzFDLE1BQUksU0FBUyxVQUFVLFdBQVc7QUFDbEMsU0FBTyxJQUFJLEtBQUssWUFBWSxNQUFNO0FBQ3BDOzs7QUNMZSxTQUFSLGdCQUFpQyxXQUFXLGFBQWE7QUFDOUQsZUFBYSxHQUFHLFNBQVM7QUFDekIsTUFBSSxTQUFTLFVBQVUsV0FBVztBQUNsQyxTQUFPLGdCQUFnQixXQUFXLENBQUMsTUFBTTtBQUMzQzs7O0FDdkJBLElBQUksc0JBQXNCO0FBQ1gsU0FBUixnQkFBaUMsV0FBVztBQUNqRCxlQUFhLEdBQUcsU0FBUztBQUN6QixNQUFJLE9BQU8sT0FBTyxTQUFTO0FBQzNCLE1BQUksWUFBWSxLQUFLLFFBQVE7QUFDN0IsT0FBSyxZQUFZLEdBQUcsQ0FBQztBQUNyQixPQUFLLFlBQVksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUMzQixNQUFJLHVCQUF1QixLQUFLLFFBQVE7QUFDeEMsTUFBSSxhQUFhLFlBQVk7QUFDN0IsU0FBTyxLQUFLLE1BQU0sYUFBYSxtQkFBbUIsSUFBSTtBQUN4RDs7O0FDVmUsU0FBUixrQkFBbUMsV0FBVztBQUNuRCxlQUFhLEdBQUcsU0FBUztBQUN6QixNQUFJLGVBQWU7QUFDbkIsTUFBSSxPQUFPLE9BQU8sU0FBUztBQUMzQixNQUFJLE1BQU0sS0FBSyxVQUFVO0FBQ3pCLE1BQUksUUFBUSxNQUFNLGVBQWUsSUFBSSxLQUFLLE1BQU07QUFDaEQsT0FBSyxXQUFXLEtBQUssV0FBVyxJQUFJLElBQUk7QUFDeEMsT0FBSyxZQUFZLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDM0IsU0FBTztBQUNUOzs7QUNSZSxTQUFSLGtCQUFtQyxXQUFXO0FBQ25ELGVBQWEsR0FBRyxTQUFTO0FBQ3pCLE1BQUksT0FBTyxPQUFPLFNBQVM7QUFDM0IsTUFBSSxPQUFPLEtBQUssZUFBZTtBQUMvQixNQUFJLDRCQUE0QixJQUFJLEtBQUssQ0FBQztBQUMxQyw0QkFBMEIsZUFBZSxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3ZELDRCQUEwQixZQUFZLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEQsTUFBSSxrQkFBa0Isa0JBQWtCLHlCQUF5QjtBQUNqRSxNQUFJLDRCQUE0QixJQUFJLEtBQUssQ0FBQztBQUMxQyw0QkFBMEIsZUFBZSxNQUFNLEdBQUcsQ0FBQztBQUNuRCw0QkFBMEIsWUFBWSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hELE1BQUksa0JBQWtCLGtCQUFrQix5QkFBeUI7QUFDakUsTUFBSSxLQUFLLFFBQVEsS0FBSyxnQkFBZ0IsUUFBUSxHQUFHO0FBQy9DLFdBQU8sT0FBTztBQUFBLEVBQ2hCLFdBQVcsS0FBSyxRQUFRLEtBQUssZ0JBQWdCLFFBQVEsR0FBRztBQUN0RCxXQUFPO0FBQUEsRUFDVCxPQUFPO0FBQ0wsV0FBTyxPQUFPO0FBQUEsRUFDaEI7QUFDRjs7O0FDbkJlLFNBQVIsc0JBQXVDLFdBQVc7QUFDdkQsZUFBYSxHQUFHLFNBQVM7QUFDekIsTUFBSSxPQUFPLGtCQUFrQixTQUFTO0FBQ3RDLE1BQUksa0JBQWtCLElBQUksS0FBSyxDQUFDO0FBQ2hDLGtCQUFnQixlQUFlLE1BQU0sR0FBRyxDQUFDO0FBQ3pDLGtCQUFnQixZQUFZLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDdEMsTUFBSSxPQUFPLGtCQUFrQixlQUFlO0FBQzVDLFNBQU87QUFDVDs7O0FDUEEsSUFBSSx1QkFBdUI7QUFDWixTQUFSLGNBQStCLFdBQVc7QUFDL0MsZUFBYSxHQUFHLFNBQVM7QUFDekIsTUFBSSxPQUFPLE9BQU8sU0FBUztBQUMzQixNQUFJLE9BQU8sa0JBQWtCLElBQUksRUFBRSxRQUFRLElBQUksc0JBQXNCLElBQUksRUFBRSxRQUFRO0FBS25GLFNBQU8sS0FBSyxNQUFNLE9BQU8sb0JBQW9CLElBQUk7QUFDbkQ7OztBQ2RBLElBQUksaUJBQWlCLENBQUM7QUFDZixTQUFTLG9CQUFvQjtBQUNsQyxTQUFPO0FBQ1Q7OztBQ0NlLFNBQVIsZUFBZ0MsV0FBVyxTQUFTO0FBQ3pELE1BQUksTUFBTSxPQUFPLE9BQU8sdUJBQXVCLGlCQUFpQix1QkFBdUIsdUJBQXVCO0FBQzlHLGVBQWEsR0FBRyxTQUFTO0FBQ3pCLE1BQUlDLGtCQUFpQixrQkFBa0I7QUFDdkMsTUFBSSxlQUFlLFdBQVcsUUFBUSxTQUFTLFNBQVMsd0JBQXdCLFlBQVksUUFBUSxZQUFZLFNBQVMsU0FBUyxRQUFRLGtCQUFrQixRQUFRLDBCQUEwQixTQUFTLHdCQUF3QixZQUFZLFFBQVEsWUFBWSxTQUFTLFVBQVUsa0JBQWtCLFFBQVEsWUFBWSxRQUFRLG9CQUFvQixTQUFTLFVBQVUsd0JBQXdCLGdCQUFnQixhQUFhLFFBQVEsMEJBQTBCLFNBQVMsU0FBUyxzQkFBc0Isa0JBQWtCLFFBQVEsVUFBVSxTQUFTLFFBQVFBLGdCQUFlLGtCQUFrQixRQUFRLFVBQVUsU0FBUyxTQUFTLHdCQUF3QkEsZ0JBQWUsWUFBWSxRQUFRLDBCQUEwQixTQUFTLFVBQVUseUJBQXlCLHNCQUFzQixhQUFhLFFBQVEsMkJBQTJCLFNBQVMsU0FBUyx1QkFBdUIsa0JBQWtCLFFBQVEsU0FBUyxTQUFTLE9BQU8sQ0FBQztBQUdwNEIsTUFBSSxFQUFFLGdCQUFnQixLQUFLLGdCQUFnQixJQUFJO0FBQzdDLFVBQU0sSUFBSSxXQUFXLGtEQUFrRDtBQUFBLEVBQ3pFO0FBQ0EsTUFBSSxPQUFPLE9BQU8sU0FBUztBQUMzQixNQUFJLE1BQU0sS0FBSyxVQUFVO0FBQ3pCLE1BQUksUUFBUSxNQUFNLGVBQWUsSUFBSSxLQUFLLE1BQU07QUFDaEQsT0FBSyxXQUFXLEtBQUssV0FBVyxJQUFJLElBQUk7QUFDeEMsT0FBSyxZQUFZLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDM0IsU0FBTztBQUNUOzs7QUNmZSxTQUFSLGVBQWdDLFdBQVcsU0FBUztBQUN6RCxNQUFJLE1BQU0sT0FBTyxPQUFPLHVCQUF1QixpQkFBaUIsdUJBQXVCLHVCQUF1QjtBQUM5RyxlQUFhLEdBQUcsU0FBUztBQUN6QixNQUFJLE9BQU8sT0FBTyxTQUFTO0FBQzNCLE1BQUksT0FBTyxLQUFLLGVBQWU7QUFDL0IsTUFBSUMsa0JBQWlCLGtCQUFrQjtBQUN2QyxNQUFJLHdCQUF3QixXQUFXLFFBQVEsU0FBUyxTQUFTLHdCQUF3QixZQUFZLFFBQVEsWUFBWSxTQUFTLFNBQVMsUUFBUSwyQkFBMkIsUUFBUSwwQkFBMEIsU0FBUyx3QkFBd0IsWUFBWSxRQUFRLFlBQVksU0FBUyxVQUFVLGtCQUFrQixRQUFRLFlBQVksUUFBUSxvQkFBb0IsU0FBUyxVQUFVLHdCQUF3QixnQkFBZ0IsYUFBYSxRQUFRLDBCQUEwQixTQUFTLFNBQVMsc0JBQXNCLDJCQUEyQixRQUFRLFVBQVUsU0FBUyxRQUFRQSxnQkFBZSwyQkFBMkIsUUFBUSxVQUFVLFNBQVMsU0FBUyx3QkFBd0JBLGdCQUFlLFlBQVksUUFBUSwwQkFBMEIsU0FBUyxVQUFVLHlCQUF5QixzQkFBc0IsYUFBYSxRQUFRLDJCQUEyQixTQUFTLFNBQVMsdUJBQXVCLDJCQUEyQixRQUFRLFNBQVMsU0FBUyxPQUFPLENBQUM7QUFHajdCLE1BQUksRUFBRSx5QkFBeUIsS0FBSyx5QkFBeUIsSUFBSTtBQUMvRCxVQUFNLElBQUksV0FBVywyREFBMkQ7QUFBQSxFQUNsRjtBQUNBLE1BQUksc0JBQXNCLElBQUksS0FBSyxDQUFDO0FBQ3BDLHNCQUFvQixlQUFlLE9BQU8sR0FBRyxHQUFHLHFCQUFxQjtBQUNyRSxzQkFBb0IsWUFBWSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQzFDLE1BQUksa0JBQWtCLGVBQWUscUJBQXFCLE9BQU87QUFDakUsTUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUM7QUFDcEMsc0JBQW9CLGVBQWUsTUFBTSxHQUFHLHFCQUFxQjtBQUNqRSxzQkFBb0IsWUFBWSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQzFDLE1BQUksa0JBQWtCLGVBQWUscUJBQXFCLE9BQU87QUFDakUsTUFBSSxLQUFLLFFBQVEsS0FBSyxnQkFBZ0IsUUFBUSxHQUFHO0FBQy9DLFdBQU8sT0FBTztBQUFBLEVBQ2hCLFdBQVcsS0FBSyxRQUFRLEtBQUssZ0JBQWdCLFFBQVEsR0FBRztBQUN0RCxXQUFPO0FBQUEsRUFDVCxPQUFPO0FBQ0wsV0FBTyxPQUFPO0FBQUEsRUFDaEI7QUFDRjs7O0FDM0JlLFNBQVIsbUJBQW9DLFdBQVcsU0FBUztBQUM3RCxNQUFJLE1BQU0sT0FBTyxPQUFPLHVCQUF1QixpQkFBaUIsdUJBQXVCLHVCQUF1QjtBQUM5RyxlQUFhLEdBQUcsU0FBUztBQUN6QixNQUFJQyxrQkFBaUIsa0JBQWtCO0FBQ3ZDLE1BQUksd0JBQXdCLFdBQVcsUUFBUSxTQUFTLFNBQVMsd0JBQXdCLFlBQVksUUFBUSxZQUFZLFNBQVMsU0FBUyxRQUFRLDJCQUEyQixRQUFRLDBCQUEwQixTQUFTLHdCQUF3QixZQUFZLFFBQVEsWUFBWSxTQUFTLFVBQVUsa0JBQWtCLFFBQVEsWUFBWSxRQUFRLG9CQUFvQixTQUFTLFVBQVUsd0JBQXdCLGdCQUFnQixhQUFhLFFBQVEsMEJBQTBCLFNBQVMsU0FBUyxzQkFBc0IsMkJBQTJCLFFBQVEsVUFBVSxTQUFTLFFBQVFBLGdCQUFlLDJCQUEyQixRQUFRLFVBQVUsU0FBUyxTQUFTLHdCQUF3QkEsZ0JBQWUsWUFBWSxRQUFRLDBCQUEwQixTQUFTLFVBQVUseUJBQXlCLHNCQUFzQixhQUFhLFFBQVEsMkJBQTJCLFNBQVMsU0FBUyx1QkFBdUIsMkJBQTJCLFFBQVEsU0FBUyxTQUFTLE9BQU8sQ0FBQztBQUNqN0IsTUFBSSxPQUFPLGVBQWUsV0FBVyxPQUFPO0FBQzVDLE1BQUksWUFBWSxJQUFJLEtBQUssQ0FBQztBQUMxQixZQUFVLGVBQWUsTUFBTSxHQUFHLHFCQUFxQjtBQUN2RCxZQUFVLFlBQVksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQyxNQUFJLE9BQU8sZUFBZSxXQUFXLE9BQU87QUFDNUMsU0FBTztBQUNUOzs7QUNaQSxJQUFJQyx3QkFBdUI7QUFDWixTQUFSLFdBQTRCLFdBQVcsU0FBUztBQUNyRCxlQUFhLEdBQUcsU0FBUztBQUN6QixNQUFJLE9BQU8sT0FBTyxTQUFTO0FBQzNCLE1BQUksT0FBTyxlQUFlLE1BQU0sT0FBTyxFQUFFLFFBQVEsSUFBSSxtQkFBbUIsTUFBTSxPQUFPLEVBQUUsUUFBUTtBQUsvRixTQUFPLEtBQUssTUFBTSxPQUFPQSxxQkFBb0IsSUFBSTtBQUNuRDs7O0FDZGUsU0FBUixnQkFBaUMsUUFBUSxjQUFjO0FBQzVELE1BQUksT0FBTyxTQUFTLElBQUksTUFBTTtBQUM5QixNQUFJLFNBQVMsS0FBSyxJQUFJLE1BQU0sRUFBRSxTQUFTO0FBQ3ZDLFNBQU8sT0FBTyxTQUFTLGNBQWM7QUFDbkMsYUFBUyxNQUFNO0FBQUEsRUFDakI7QUFDQSxTQUFPLE9BQU87QUFDaEI7OztBQ01BLElBQUksYUFBYTtBQUFBO0FBQUEsRUFFZixHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU87QUFVekIsUUFBSSxhQUFhLEtBQUssZUFBZTtBQUVyQyxRQUFJLE9BQU8sYUFBYSxJQUFJLGFBQWEsSUFBSTtBQUM3QyxXQUFPLGdCQUFnQixVQUFVLE9BQU8sT0FBTyxNQUFNLE1BQU0sTUFBTSxNQUFNO0FBQUEsRUFDekU7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPO0FBQ3pCLFFBQUksUUFBUSxLQUFLLFlBQVk7QUFDN0IsV0FBTyxVQUFVLE1BQU0sT0FBTyxRQUFRLENBQUMsSUFBSSxnQkFBZ0IsUUFBUSxHQUFHLENBQUM7QUFBQSxFQUN6RTtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU87QUFDekIsV0FBTyxnQkFBZ0IsS0FBSyxXQUFXLEdBQUcsTUFBTSxNQUFNO0FBQUEsRUFDeEQ7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPO0FBQ3pCLFFBQUkscUJBQXFCLEtBQUssWUFBWSxJQUFJLE1BQU0sSUFBSSxPQUFPO0FBQy9ELFlBQVEsT0FBTztBQUFBLE1BQ2IsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILGVBQU8sbUJBQW1CLFlBQVk7QUFBQSxNQUN4QyxLQUFLO0FBQ0gsZUFBTztBQUFBLE1BQ1QsS0FBSztBQUNILGVBQU8sbUJBQW1CLENBQUM7QUFBQSxNQUM3QixLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU8sdUJBQXVCLE9BQU8sU0FBUztBQUFBLElBQ2xEO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU87QUFDekIsV0FBTyxnQkFBZ0IsS0FBSyxZQUFZLElBQUksTUFBTSxJQUFJLE1BQU0sTUFBTTtBQUFBLEVBQ3BFO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBTztBQUN6QixXQUFPLGdCQUFnQixLQUFLLFlBQVksR0FBRyxNQUFNLE1BQU07QUFBQSxFQUN6RDtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU87QUFDekIsV0FBTyxnQkFBZ0IsS0FBSyxjQUFjLEdBQUcsTUFBTSxNQUFNO0FBQUEsRUFDM0Q7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPO0FBQ3pCLFdBQU8sZ0JBQWdCLEtBQUssY0FBYyxHQUFHLE1BQU0sTUFBTTtBQUFBLEVBQzNEO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBTztBQUN6QixRQUFJLGlCQUFpQixNQUFNO0FBQzNCLFFBQUksZUFBZSxLQUFLLG1CQUFtQjtBQUMzQyxRQUFJLG9CQUFvQixLQUFLLE1BQU0sZUFBZSxLQUFLLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2xGLFdBQU8sZ0JBQWdCLG1CQUFtQixNQUFNLE1BQU07QUFBQSxFQUN4RDtBQUNGO0FBQ0EsSUFBTywwQkFBUTs7O0FDeEVmLElBQUksZ0JBQWdCO0FBQUEsRUFDbEIsSUFBSTtBQUFBLEVBQ0osSUFBSTtBQUFBLEVBQ0osVUFBVTtBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsT0FBTztBQUNUO0FBK0NBLElBQUlDLGNBQWE7QUFBQTtBQUFBLEVBRWYsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQyxXQUFVO0FBQ25DLFFBQUksTUFBTSxLQUFLLGVBQWUsSUFBSSxJQUFJLElBQUk7QUFDMUMsWUFBUSxPQUFPO0FBQUEsTUFFYixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxJQUFJLEtBQUs7QUFBQSxVQUN2QixPQUFPO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxJQUFJLEtBQUs7QUFBQSxVQUN2QixPQUFPO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU9BLFVBQVMsSUFBSSxLQUFLO0FBQUEsVUFDdkIsT0FBTztBQUFBLFFBQ1QsQ0FBQztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBU0MsR0FBRSxNQUFNLE9BQU9ELFdBQVU7QUFFbkMsUUFBSSxVQUFVLE1BQU07QUFDbEIsVUFBSSxhQUFhLEtBQUssZUFBZTtBQUVyQyxVQUFJLE9BQU8sYUFBYSxJQUFJLGFBQWEsSUFBSTtBQUM3QyxhQUFPQSxVQUFTLGNBQWMsTUFBTTtBQUFBLFFBQ2xDLE1BQU07QUFBQSxNQUNSLENBQUM7QUFBQSxJQUNIO0FBQ0EsV0FBTyx3QkFBZ0IsRUFBRSxNQUFNLEtBQUs7QUFBQSxFQUN0QztBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU9BLFdBQVUsU0FBUztBQUM1QyxRQUFJLGlCQUFpQixlQUFlLE1BQU0sT0FBTztBQUVqRCxRQUFJLFdBQVcsaUJBQWlCLElBQUksaUJBQWlCLElBQUk7QUFHekQsUUFBSSxVQUFVLE1BQU07QUFDbEIsVUFBSSxlQUFlLFdBQVc7QUFDOUIsYUFBTyxnQkFBZ0IsY0FBYyxDQUFDO0FBQUEsSUFDeEM7QUFHQSxRQUFJLFVBQVUsTUFBTTtBQUNsQixhQUFPQSxVQUFTLGNBQWMsVUFBVTtBQUFBLFFBQ3RDLE1BQU07QUFBQSxNQUNSLENBQUM7QUFBQSxJQUNIO0FBR0EsV0FBTyxnQkFBZ0IsVUFBVSxNQUFNLE1BQU07QUFBQSxFQUMvQztBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU87QUFDekIsUUFBSSxjQUFjLGtCQUFrQixJQUFJO0FBR3hDLFdBQU8sZ0JBQWdCLGFBQWEsTUFBTSxNQUFNO0FBQUEsRUFDbEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBTztBQUN6QixRQUFJLE9BQU8sS0FBSyxlQUFlO0FBQy9CLFdBQU8sZ0JBQWdCLE1BQU0sTUFBTSxNQUFNO0FBQUEsRUFDM0M7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVO0FBQ25DLFFBQUksVUFBVSxLQUFLLE1BQU0sS0FBSyxZQUFZLElBQUksS0FBSyxDQUFDO0FBQ3BELFlBQVEsT0FBTztBQUFBLE1BRWIsS0FBSztBQUNILGVBQU8sT0FBTyxPQUFPO0FBQUEsTUFFdkIsS0FBSztBQUNILGVBQU8sZ0JBQWdCLFNBQVMsQ0FBQztBQUFBLE1BRW5DLEtBQUs7QUFDSCxlQUFPQSxVQUFTLGNBQWMsU0FBUztBQUFBLFVBQ3JDLE1BQU07QUFBQSxRQUNSLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLFFBQVEsU0FBUztBQUFBLFVBQy9CLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLFFBQVEsU0FBUztBQUFBLFVBQy9CLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT0EsVUFBUyxRQUFRLFNBQVM7QUFBQSxVQUMvQixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVO0FBQ25DLFFBQUksVUFBVSxLQUFLLE1BQU0sS0FBSyxZQUFZLElBQUksS0FBSyxDQUFDO0FBQ3BELFlBQVEsT0FBTztBQUFBLE1BRWIsS0FBSztBQUNILGVBQU8sT0FBTyxPQUFPO0FBQUEsTUFFdkIsS0FBSztBQUNILGVBQU8sZ0JBQWdCLFNBQVMsQ0FBQztBQUFBLE1BRW5DLEtBQUs7QUFDSCxlQUFPQSxVQUFTLGNBQWMsU0FBUztBQUFBLFVBQ3JDLE1BQU07QUFBQSxRQUNSLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLFFBQVEsU0FBUztBQUFBLFVBQy9CLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLFFBQVEsU0FBUztBQUFBLFVBQy9CLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT0EsVUFBUyxRQUFRLFNBQVM7QUFBQSxVQUMvQixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTRSxHQUFFLE1BQU0sT0FBT0YsV0FBVTtBQUNuQyxRQUFJLFFBQVEsS0FBSyxZQUFZO0FBQzdCLFlBQVEsT0FBTztBQUFBLE1BQ2IsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILGVBQU8sd0JBQWdCLEVBQUUsTUFBTSxLQUFLO0FBQUEsTUFFdEMsS0FBSztBQUNILGVBQU9BLFVBQVMsY0FBYyxRQUFRLEdBQUc7QUFBQSxVQUN2QyxNQUFNO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxNQUFNLE9BQU87QUFBQSxVQUMzQixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxNQUFNLE9BQU87QUFBQSxVQUMzQixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU9BLFVBQVMsTUFBTSxPQUFPO0FBQUEsVUFDM0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBT0EsV0FBVTtBQUNuQyxRQUFJLFFBQVEsS0FBSyxZQUFZO0FBQzdCLFlBQVEsT0FBTztBQUFBLE1BRWIsS0FBSztBQUNILGVBQU8sT0FBTyxRQUFRLENBQUM7QUFBQSxNQUV6QixLQUFLO0FBQ0gsZUFBTyxnQkFBZ0IsUUFBUSxHQUFHLENBQUM7QUFBQSxNQUVyQyxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxjQUFjLFFBQVEsR0FBRztBQUFBLFVBQ3ZDLE1BQU07QUFBQSxRQUNSLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLE1BQU0sT0FBTztBQUFBLFVBQzNCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLE1BQU0sT0FBTztBQUFBLFVBQzNCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT0EsVUFBUyxNQUFNLE9BQU87QUFBQSxVQUMzQixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVLFNBQVM7QUFDNUMsUUFBSSxPQUFPLFdBQVcsTUFBTSxPQUFPO0FBQ25DLFFBQUksVUFBVSxNQUFNO0FBQ2xCLGFBQU9BLFVBQVMsY0FBYyxNQUFNO0FBQUEsUUFDbEMsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBLElBQ0g7QUFDQSxXQUFPLGdCQUFnQixNQUFNLE1BQU0sTUFBTTtBQUFBLEVBQzNDO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBT0EsV0FBVTtBQUNuQyxRQUFJLFVBQVUsY0FBYyxJQUFJO0FBQ2hDLFFBQUksVUFBVSxNQUFNO0FBQ2xCLGFBQU9BLFVBQVMsY0FBYyxTQUFTO0FBQUEsUUFDckMsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBLElBQ0g7QUFDQSxXQUFPLGdCQUFnQixTQUFTLE1BQU0sTUFBTTtBQUFBLEVBQzlDO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBU0csR0FBRSxNQUFNLE9BQU9ILFdBQVU7QUFDbkMsUUFBSSxVQUFVLE1BQU07QUFDbEIsYUFBT0EsVUFBUyxjQUFjLEtBQUssV0FBVyxHQUFHO0FBQUEsUUFDL0MsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBLElBQ0g7QUFDQSxXQUFPLHdCQUFnQixFQUFFLE1BQU0sS0FBSztBQUFBLEVBQ3RDO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBT0EsV0FBVTtBQUNuQyxRQUFJLFlBQVksZ0JBQWdCLElBQUk7QUFDcEMsUUFBSSxVQUFVLE1BQU07QUFDbEIsYUFBT0EsVUFBUyxjQUFjLFdBQVc7QUFBQSxRQUN2QyxNQUFNO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDSDtBQUNBLFdBQU8sZ0JBQWdCLFdBQVcsTUFBTSxNQUFNO0FBQUEsRUFDaEQ7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVO0FBQ25DLFFBQUksWUFBWSxLQUFLLFVBQVU7QUFDL0IsWUFBUSxPQUFPO0FBQUEsTUFFYixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU9BLFVBQVMsSUFBSSxXQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBT0EsV0FBVSxTQUFTO0FBQzVDLFFBQUksWUFBWSxLQUFLLFVBQVU7QUFDL0IsUUFBSSxrQkFBa0IsWUFBWSxRQUFRLGVBQWUsS0FBSyxLQUFLO0FBQ25FLFlBQVEsT0FBTztBQUFBLE1BRWIsS0FBSztBQUNILGVBQU8sT0FBTyxjQUFjO0FBQUEsTUFFOUIsS0FBSztBQUNILGVBQU8sZ0JBQWdCLGdCQUFnQixDQUFDO0FBQUEsTUFFMUMsS0FBSztBQUNILGVBQU9BLFVBQVMsY0FBYyxnQkFBZ0I7QUFBQSxVQUM1QyxNQUFNO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFDSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU9BLFVBQVMsSUFBSSxXQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBT0EsV0FBVSxTQUFTO0FBQzVDLFFBQUksWUFBWSxLQUFLLFVBQVU7QUFDL0IsUUFBSSxrQkFBa0IsWUFBWSxRQUFRLGVBQWUsS0FBSyxLQUFLO0FBQ25FLFlBQVEsT0FBTztBQUFBLE1BRWIsS0FBSztBQUNILGVBQU8sT0FBTyxjQUFjO0FBQUEsTUFFOUIsS0FBSztBQUNILGVBQU8sZ0JBQWdCLGdCQUFnQixNQUFNLE1BQU07QUFBQSxNQUVyRCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxjQUFjLGdCQUFnQjtBQUFBLFVBQzVDLE1BQU07QUFBQSxRQUNSLENBQUM7QUFBQSxNQUNILEtBQUs7QUFDSCxlQUFPQSxVQUFTLElBQUksV0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLElBQUksV0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLElBQUksV0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVO0FBQ25DLFFBQUksWUFBWSxLQUFLLFVBQVU7QUFDL0IsUUFBSSxlQUFlLGNBQWMsSUFBSSxJQUFJO0FBQ3pDLFlBQVEsT0FBTztBQUFBLE1BRWIsS0FBSztBQUNILGVBQU8sT0FBTyxZQUFZO0FBQUEsTUFFNUIsS0FBSztBQUNILGVBQU8sZ0JBQWdCLGNBQWMsTUFBTSxNQUFNO0FBQUEsTUFFbkQsS0FBSztBQUNILGVBQU9BLFVBQVMsY0FBYyxjQUFjO0FBQUEsVUFDMUMsTUFBTTtBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9BLFVBQVMsSUFBSSxXQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9BLFVBQVMsSUFBSSxXQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9BLFVBQVMsSUFBSSxXQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPQSxVQUFTLElBQUksV0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxJQUNMO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVNJLEdBQUUsTUFBTSxPQUFPSixXQUFVO0FBQ25DLFFBQUksUUFBUSxLQUFLLFlBQVk7QUFDN0IsUUFBSSxxQkFBcUIsUUFBUSxNQUFNLElBQUksT0FBTztBQUNsRCxZQUFRLE9BQU87QUFBQSxNQUNiLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPQSxVQUFTLFVBQVUsb0JBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BQ0gsS0FBSztBQUNILGVBQU9BLFVBQVMsVUFBVSxvQkFBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDLEVBQUUsWUFBWTtBQUFBLE1BQ2pCLEtBQUs7QUFDSCxlQUFPQSxVQUFTLFVBQVUsb0JBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BQ0gsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPQSxVQUFTLFVBQVUsb0JBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBT0EsV0FBVTtBQUNuQyxRQUFJLFFBQVEsS0FBSyxZQUFZO0FBQzdCLFFBQUk7QUFDSixRQUFJLFVBQVUsSUFBSTtBQUNoQiwyQkFBcUIsY0FBYztBQUFBLElBQ3JDLFdBQVcsVUFBVSxHQUFHO0FBQ3RCLDJCQUFxQixjQUFjO0FBQUEsSUFDckMsT0FBTztBQUNMLDJCQUFxQixRQUFRLE1BQU0sSUFBSSxPQUFPO0FBQUEsSUFDaEQ7QUFDQSxZQUFRLE9BQU87QUFBQSxNQUNiLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPQSxVQUFTLFVBQVUsb0JBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BQ0gsS0FBSztBQUNILGVBQU9BLFVBQVMsVUFBVSxvQkFBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDLEVBQUUsWUFBWTtBQUFBLE1BQ2pCLEtBQUs7QUFDSCxlQUFPQSxVQUFTLFVBQVUsb0JBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BQ0gsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPQSxVQUFTLFVBQVUsb0JBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBT0EsV0FBVTtBQUNuQyxRQUFJLFFBQVEsS0FBSyxZQUFZO0FBQzdCLFFBQUk7QUFDSixRQUFJLFNBQVMsSUFBSTtBQUNmLDJCQUFxQixjQUFjO0FBQUEsSUFDckMsV0FBVyxTQUFTLElBQUk7QUFDdEIsMkJBQXFCLGNBQWM7QUFBQSxJQUNyQyxXQUFXLFNBQVMsR0FBRztBQUNyQiwyQkFBcUIsY0FBYztBQUFBLElBQ3JDLE9BQU87QUFDTCwyQkFBcUIsY0FBYztBQUFBLElBQ3JDO0FBQ0EsWUFBUSxPQUFPO0FBQUEsTUFDYixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxVQUFVLG9CQUFvQjtBQUFBLFVBQzVDLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUNILEtBQUs7QUFDSCxlQUFPQSxVQUFTLFVBQVUsb0JBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BQ0gsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPQSxVQUFTLFVBQVUsb0JBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBU0ssR0FBRSxNQUFNLE9BQU9MLFdBQVU7QUFDbkMsUUFBSSxVQUFVLE1BQU07QUFDbEIsVUFBSSxRQUFRLEtBQUssWUFBWSxJQUFJO0FBQ2pDLFVBQUksVUFBVTtBQUFHLGdCQUFRO0FBQ3pCLGFBQU9BLFVBQVMsY0FBYyxPQUFPO0FBQUEsUUFDbkMsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBLElBQ0g7QUFDQSxXQUFPLHdCQUFnQixFQUFFLE1BQU0sS0FBSztBQUFBLEVBQ3RDO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBU00sR0FBRSxNQUFNLE9BQU9OLFdBQVU7QUFDbkMsUUFBSSxVQUFVLE1BQU07QUFDbEIsYUFBT0EsVUFBUyxjQUFjLEtBQUssWUFBWSxHQUFHO0FBQUEsUUFDaEQsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBLElBQ0g7QUFDQSxXQUFPLHdCQUFnQixFQUFFLE1BQU0sS0FBSztBQUFBLEVBQ3RDO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBT0EsV0FBVTtBQUNuQyxRQUFJLFFBQVEsS0FBSyxZQUFZLElBQUk7QUFDakMsUUFBSSxVQUFVLE1BQU07QUFDbEIsYUFBT0EsVUFBUyxjQUFjLE9BQU87QUFBQSxRQUNuQyxNQUFNO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDSDtBQUNBLFdBQU8sZ0JBQWdCLE9BQU8sTUFBTSxNQUFNO0FBQUEsRUFDNUM7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVO0FBQ25DLFFBQUksUUFBUSxLQUFLLFlBQVk7QUFDN0IsUUFBSSxVQUFVO0FBQUcsY0FBUTtBQUN6QixRQUFJLFVBQVUsTUFBTTtBQUNsQixhQUFPQSxVQUFTLGNBQWMsT0FBTztBQUFBLFFBQ25DLE1BQU07QUFBQSxNQUNSLENBQUM7QUFBQSxJQUNIO0FBQ0EsV0FBTyxnQkFBZ0IsT0FBTyxNQUFNLE1BQU07QUFBQSxFQUM1QztBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVNPLEdBQUUsTUFBTSxPQUFPUCxXQUFVO0FBQ25DLFFBQUksVUFBVSxNQUFNO0FBQ2xCLGFBQU9BLFVBQVMsY0FBYyxLQUFLLGNBQWMsR0FBRztBQUFBLFFBQ2xELE1BQU07QUFBQSxNQUNSLENBQUM7QUFBQSxJQUNIO0FBQ0EsV0FBTyx3QkFBZ0IsRUFBRSxNQUFNLEtBQUs7QUFBQSxFQUN0QztBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVNRLEdBQUUsTUFBTSxPQUFPUixXQUFVO0FBQ25DLFFBQUksVUFBVSxNQUFNO0FBQ2xCLGFBQU9BLFVBQVMsY0FBYyxLQUFLLGNBQWMsR0FBRztBQUFBLFFBQ2xELE1BQU07QUFBQSxNQUNSLENBQUM7QUFBQSxJQUNIO0FBQ0EsV0FBTyx3QkFBZ0IsRUFBRSxNQUFNLEtBQUs7QUFBQSxFQUN0QztBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVNTLEdBQUUsTUFBTSxPQUFPO0FBQ3pCLFdBQU8sd0JBQWdCLEVBQUUsTUFBTSxLQUFLO0FBQUEsRUFDdEM7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPLFdBQVcsU0FBUztBQUM3QyxRQUFJLGVBQWUsUUFBUSxpQkFBaUI7QUFDNUMsUUFBSSxpQkFBaUIsYUFBYSxrQkFBa0I7QUFDcEQsUUFBSSxtQkFBbUIsR0FBRztBQUN4QixhQUFPO0FBQUEsSUFDVDtBQUNBLFlBQVEsT0FBTztBQUFBLE1BRWIsS0FBSztBQUNILGVBQU8sa0NBQWtDLGNBQWM7QUFBQSxNQUt6RCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBRUgsZUFBTyxlQUFlLGNBQWM7QUFBQSxNQUt0QyxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU8sZUFBZSxnQkFBZ0IsR0FBRztBQUFBLElBQzdDO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU8sV0FBVyxTQUFTO0FBQzdDLFFBQUksZUFBZSxRQUFRLGlCQUFpQjtBQUM1QyxRQUFJLGlCQUFpQixhQUFhLGtCQUFrQjtBQUNwRCxZQUFRLE9BQU87QUFBQSxNQUViLEtBQUs7QUFDSCxlQUFPLGtDQUFrQyxjQUFjO0FBQUEsTUFLekQsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUVILGVBQU8sZUFBZSxjQUFjO0FBQUEsTUFLdEMsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPLGVBQWUsZ0JBQWdCLEdBQUc7QUFBQSxJQUM3QztBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPLFdBQVcsU0FBUztBQUM3QyxRQUFJLGVBQWUsUUFBUSxpQkFBaUI7QUFDNUMsUUFBSSxpQkFBaUIsYUFBYSxrQkFBa0I7QUFDcEQsWUFBUSxPQUFPO0FBQUEsTUFFYixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBTyxRQUFRLG9CQUFvQixnQkFBZ0IsR0FBRztBQUFBLE1BRXhELEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBTyxRQUFRLGVBQWUsZ0JBQWdCLEdBQUc7QUFBQSxJQUNyRDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPLFdBQVcsU0FBUztBQUM3QyxRQUFJLGVBQWUsUUFBUSxpQkFBaUI7QUFDNUMsUUFBSSxpQkFBaUIsYUFBYSxrQkFBa0I7QUFDcEQsWUFBUSxPQUFPO0FBQUEsTUFFYixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBTyxRQUFRLG9CQUFvQixnQkFBZ0IsR0FBRztBQUFBLE1BRXhELEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBTyxRQUFRLGVBQWUsZ0JBQWdCLEdBQUc7QUFBQSxJQUNyRDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPLFdBQVcsU0FBUztBQUM3QyxRQUFJLGVBQWUsUUFBUSxpQkFBaUI7QUFDNUMsUUFBSSxZQUFZLEtBQUssTUFBTSxhQUFhLFFBQVEsSUFBSSxHQUFJO0FBQ3hELFdBQU8sZ0JBQWdCLFdBQVcsTUFBTSxNQUFNO0FBQUEsRUFDaEQ7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPLFdBQVcsU0FBUztBQUM3QyxRQUFJLGVBQWUsUUFBUSxpQkFBaUI7QUFDNUMsUUFBSSxZQUFZLGFBQWEsUUFBUTtBQUNyQyxXQUFPLGdCQUFnQixXQUFXLE1BQU0sTUFBTTtBQUFBLEVBQ2hEO0FBQ0Y7QUFDQSxTQUFTLG9CQUFvQixRQUFRLGdCQUFnQjtBQUNuRCxNQUFJLE9BQU8sU0FBUyxJQUFJLE1BQU07QUFDOUIsTUFBSSxZQUFZLEtBQUssSUFBSSxNQUFNO0FBQy9CLE1BQUksUUFBUSxLQUFLLE1BQU0sWUFBWSxFQUFFO0FBQ3JDLE1BQUksVUFBVSxZQUFZO0FBQzFCLE1BQUksWUFBWSxHQUFHO0FBQ2pCLFdBQU8sT0FBTyxPQUFPLEtBQUs7QUFBQSxFQUM1QjtBQUNBLE1BQUksWUFBWSxrQkFBa0I7QUFDbEMsU0FBTyxPQUFPLE9BQU8sS0FBSyxJQUFJLFlBQVksZ0JBQWdCLFNBQVMsQ0FBQztBQUN0RTtBQUNBLFNBQVMsa0NBQWtDLFFBQVEsZ0JBQWdCO0FBQ2pFLE1BQUksU0FBUyxPQUFPLEdBQUc7QUFDckIsUUFBSSxPQUFPLFNBQVMsSUFBSSxNQUFNO0FBQzlCLFdBQU8sT0FBTyxnQkFBZ0IsS0FBSyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFBQSxFQUN4RDtBQUNBLFNBQU8sZUFBZSxRQUFRLGNBQWM7QUFDOUM7QUFDQSxTQUFTLGVBQWUsUUFBUSxnQkFBZ0I7QUFDOUMsTUFBSSxZQUFZLGtCQUFrQjtBQUNsQyxNQUFJLE9BQU8sU0FBUyxJQUFJLE1BQU07QUFDOUIsTUFBSSxZQUFZLEtBQUssSUFBSSxNQUFNO0FBQy9CLE1BQUksUUFBUSxnQkFBZ0IsS0FBSyxNQUFNLFlBQVksRUFBRSxHQUFHLENBQUM7QUFDekQsTUFBSSxVQUFVLGdCQUFnQixZQUFZLElBQUksQ0FBQztBQUMvQyxTQUFPLE9BQU8sUUFBUSxZQUFZO0FBQ3BDO0FBQ0EsSUFBTyxxQkFBUVY7OztBQ253QmYsSUFBSSxvQkFBb0IsU0FBU1csbUJBQWtCLFNBQVNDLGFBQVk7QUFDdEUsVUFBUSxTQUFTO0FBQUEsSUFDZixLQUFLO0FBQ0gsYUFBT0EsWUFBVyxLQUFLO0FBQUEsUUFDckIsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0gsS0FBSztBQUNILGFBQU9BLFlBQVcsS0FBSztBQUFBLFFBQ3JCLE9BQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNILEtBQUs7QUFDSCxhQUFPQSxZQUFXLEtBQUs7QUFBQSxRQUNyQixPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSCxLQUFLO0FBQUEsSUFDTDtBQUNFLGFBQU9BLFlBQVcsS0FBSztBQUFBLFFBQ3JCLE9BQU87QUFBQSxNQUNULENBQUM7QUFBQSxFQUNMO0FBQ0Y7QUFDQSxJQUFJLG9CQUFvQixTQUFTQyxtQkFBa0IsU0FBU0QsYUFBWTtBQUN0RSxVQUFRLFNBQVM7QUFBQSxJQUNmLEtBQUs7QUFDSCxhQUFPQSxZQUFXLEtBQUs7QUFBQSxRQUNyQixPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSCxLQUFLO0FBQ0gsYUFBT0EsWUFBVyxLQUFLO0FBQUEsUUFDckIsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0gsS0FBSztBQUNILGFBQU9BLFlBQVcsS0FBSztBQUFBLFFBQ3JCLE9BQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNILEtBQUs7QUFBQSxJQUNMO0FBQ0UsYUFBT0EsWUFBVyxLQUFLO0FBQUEsUUFDckIsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLEVBQ0w7QUFDRjtBQUNBLElBQUksd0JBQXdCLFNBQVNFLHVCQUFzQixTQUFTRixhQUFZO0FBQzlFLE1BQUksY0FBYyxRQUFRLE1BQU0sV0FBVyxLQUFLLENBQUM7QUFDakQsTUFBSSxjQUFjLFlBQVksQ0FBQztBQUMvQixNQUFJLGNBQWMsWUFBWSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxhQUFhO0FBQ2hCLFdBQU8sa0JBQWtCLFNBQVNBLFdBQVU7QUFBQSxFQUM5QztBQUNBLE1BQUk7QUFDSixVQUFRLGFBQWE7QUFBQSxJQUNuQixLQUFLO0FBQ0gsdUJBQWlCQSxZQUFXLFNBQVM7QUFBQSxRQUNuQyxPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQ0Q7QUFBQSxJQUNGLEtBQUs7QUFDSCx1QkFBaUJBLFlBQVcsU0FBUztBQUFBLFFBQ25DLE9BQU87QUFBQSxNQUNULENBQUM7QUFDRDtBQUFBLElBQ0YsS0FBSztBQUNILHVCQUFpQkEsWUFBVyxTQUFTO0FBQUEsUUFDbkMsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUNEO0FBQUEsSUFDRixLQUFLO0FBQUEsSUFDTDtBQUNFLHVCQUFpQkEsWUFBVyxTQUFTO0FBQUEsUUFDbkMsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUNEO0FBQUEsRUFDSjtBQUNBLFNBQU8sZUFBZSxRQUFRLFlBQVksa0JBQWtCLGFBQWFBLFdBQVUsQ0FBQyxFQUFFLFFBQVEsWUFBWSxrQkFBa0IsYUFBYUEsV0FBVSxDQUFDO0FBQ3RKO0FBQ0EsSUFBSSxpQkFBaUI7QUFBQSxFQUNuQixHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQ0w7QUFDQSxJQUFPLHlCQUFROzs7QUNwRUEsU0FBUixnQ0FBaUQsTUFBTTtBQUM1RCxNQUFJLFVBQVUsSUFBSSxLQUFLLEtBQUssSUFBSSxLQUFLLFlBQVksR0FBRyxLQUFLLFNBQVMsR0FBRyxLQUFLLFFBQVEsR0FBRyxLQUFLLFNBQVMsR0FBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLGdCQUFnQixDQUFDLENBQUM7QUFDbkssVUFBUSxlQUFlLEtBQUssWUFBWSxDQUFDO0FBQ3pDLFNBQU8sS0FBSyxRQUFRLElBQUksUUFBUSxRQUFRO0FBQzFDOzs7QUNmQSxJQUFJLDJCQUEyQixDQUFDLEtBQUssSUFBSTtBQUN6QyxJQUFJLDBCQUEwQixDQUFDLE1BQU0sTUFBTTtBQUNwQyxTQUFTLDBCQUEwQixPQUFPO0FBQy9DLFNBQU8seUJBQXlCLFFBQVEsS0FBSyxNQUFNO0FBQ3JEO0FBQ08sU0FBUyx5QkFBeUIsT0FBTztBQUM5QyxTQUFPLHdCQUF3QixRQUFRLEtBQUssTUFBTTtBQUNwRDtBQUNPLFNBQVMsb0JBQW9CLE9BQU9HLFNBQVEsT0FBTztBQUN4RCxNQUFJLFVBQVUsUUFBUTtBQUNwQixVQUFNLElBQUksV0FBVyxxQ0FBcUMsT0FBT0EsU0FBUSx3Q0FBd0MsRUFBRSxPQUFPLE9BQU8sZ0ZBQWdGLENBQUM7QUFBQSxFQUNwTixXQUFXLFVBQVUsTUFBTTtBQUN6QixVQUFNLElBQUksV0FBVyxpQ0FBaUMsT0FBT0EsU0FBUSx3Q0FBd0MsRUFBRSxPQUFPLE9BQU8sZ0ZBQWdGLENBQUM7QUFBQSxFQUNoTixXQUFXLFVBQVUsS0FBSztBQUN4QixVQUFNLElBQUksV0FBVywrQkFBK0IsT0FBT0EsU0FBUSxvREFBb0QsRUFBRSxPQUFPLE9BQU8sZ0ZBQWdGLENBQUM7QUFBQSxFQUMxTixXQUFXLFVBQVUsTUFBTTtBQUN6QixVQUFNLElBQUksV0FBVyxpQ0FBaUMsT0FBT0EsU0FBUSxvREFBb0QsRUFBRSxPQUFPLE9BQU8sZ0ZBQWdGLENBQUM7QUFBQSxFQUM1TjtBQUNGOzs7QUNsQkEsSUFBSSx1QkFBdUI7QUFBQSxFQUN6QixrQkFBa0I7QUFBQSxJQUNoQixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLGFBQWE7QUFBQSxFQUNiLGtCQUFrQjtBQUFBLElBQ2hCLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1gsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNOLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1gsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNOLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxjQUFjO0FBQUEsSUFDWixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1AsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLGFBQWE7QUFBQSxJQUNYLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDTixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsWUFBWTtBQUFBLElBQ1YsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLGNBQWM7QUFBQSxJQUNaLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQ0Y7QUFDQSxJQUFJLGlCQUFpQixTQUFTQyxnQkFBZSxPQUFPLE9BQU8sU0FBUztBQUNsRSxNQUFJO0FBQ0osTUFBSSxhQUFhLHFCQUFxQixLQUFLO0FBQzNDLE1BQUksT0FBTyxlQUFlLFVBQVU7QUFDbEMsYUFBUztBQUFBLEVBQ1gsV0FBVyxVQUFVLEdBQUc7QUFDdEIsYUFBUyxXQUFXO0FBQUEsRUFDdEIsT0FBTztBQUNMLGFBQVMsV0FBVyxNQUFNLFFBQVEsYUFBYSxNQUFNLFNBQVMsQ0FBQztBQUFBLEVBQ2pFO0FBQ0EsTUFBSSxZQUFZLFFBQVEsWUFBWSxVQUFVLFFBQVEsV0FBVztBQUMvRCxRQUFJLFFBQVEsY0FBYyxRQUFRLGFBQWEsR0FBRztBQUNoRCxhQUFPLFFBQVE7QUFBQSxJQUNqQixPQUFPO0FBQ0wsYUFBTyxTQUFTO0FBQUEsSUFDbEI7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBQ0EsSUFBTyx5QkFBUTs7O0FDbEZBLFNBQVIsa0JBQW1DLE1BQU07QUFDOUMsU0FBTyxXQUFZO0FBQ2pCLFFBQUksVUFBVSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFFbkYsUUFBSSxRQUFRLFFBQVEsUUFBUSxPQUFPLFFBQVEsS0FBSyxJQUFJLEtBQUs7QUFDekQsUUFBSUMsVUFBUyxLQUFLLFFBQVEsS0FBSyxLQUFLLEtBQUssUUFBUSxLQUFLLFlBQVk7QUFDbEUsV0FBT0E7QUFBQSxFQUNUO0FBQ0Y7OztBQ1BBLElBQUksY0FBYztBQUFBLEVBQ2hCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFDVDtBQUNBLElBQUksY0FBYztBQUFBLEVBQ2hCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFDVDtBQUNBLElBQUksa0JBQWtCO0FBQUEsRUFDcEIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUNUO0FBQ0EsSUFBSSxhQUFhO0FBQUEsRUFDZixNQUFNLGtCQUFrQjtBQUFBLElBQ3RCLFNBQVM7QUFBQSxJQUNULGNBQWM7QUFBQSxFQUNoQixDQUFDO0FBQUEsRUFDRCxNQUFNLGtCQUFrQjtBQUFBLElBQ3RCLFNBQVM7QUFBQSxJQUNULGNBQWM7QUFBQSxFQUNoQixDQUFDO0FBQUEsRUFDRCxVQUFVLGtCQUFrQjtBQUFBLElBQzFCLFNBQVM7QUFBQSxJQUNULGNBQWM7QUFBQSxFQUNoQixDQUFDO0FBQ0g7QUFDQSxJQUFPLHFCQUFROzs7QUNqQ2YsSUFBSSx1QkFBdUI7QUFBQSxFQUN6QixVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixPQUFPO0FBQ1Q7QUFDQSxJQUFJLGlCQUFpQixTQUFTQyxnQkFBZSxPQUFPLE9BQU8sV0FBVyxVQUFVO0FBQzlFLFNBQU8scUJBQXFCLEtBQUs7QUFDbkM7QUFDQSxJQUFPLHlCQUFROzs7QUNYQSxTQUFSLGdCQUFpQyxNQUFNO0FBQzVDLFNBQU8sU0FBVSxZQUFZLFNBQVM7QUFDcEMsUUFBSSxVQUFVLFlBQVksUUFBUSxZQUFZLFVBQVUsUUFBUSxVQUFVLE9BQU8sUUFBUSxPQUFPLElBQUk7QUFDcEcsUUFBSTtBQUNKLFFBQUksWUFBWSxnQkFBZ0IsS0FBSyxrQkFBa0I7QUFDckQsVUFBSSxlQUFlLEtBQUssMEJBQTBCLEtBQUs7QUFDdkQsVUFBSSxRQUFRLFlBQVksUUFBUSxZQUFZLFVBQVUsUUFBUSxRQUFRLE9BQU8sUUFBUSxLQUFLLElBQUk7QUFDOUYsb0JBQWMsS0FBSyxpQkFBaUIsS0FBSyxLQUFLLEtBQUssaUJBQWlCLFlBQVk7QUFBQSxJQUNsRixPQUFPO0FBQ0wsVUFBSSxnQkFBZ0IsS0FBSztBQUN6QixVQUFJLFNBQVMsWUFBWSxRQUFRLFlBQVksVUFBVSxRQUFRLFFBQVEsT0FBTyxRQUFRLEtBQUssSUFBSSxLQUFLO0FBQ3BHLG9CQUFjLEtBQUssT0FBTyxNQUFNLEtBQUssS0FBSyxPQUFPLGFBQWE7QUFBQSxJQUNoRTtBQUNBLFFBQUksUUFBUSxLQUFLLG1CQUFtQixLQUFLLGlCQUFpQixVQUFVLElBQUk7QUFFeEUsV0FBTyxZQUFZLEtBQUs7QUFBQSxFQUMxQjtBQUNGOzs7QUNoQkEsSUFBSSxZQUFZO0FBQUEsRUFDZCxRQUFRLENBQUMsS0FBSyxHQUFHO0FBQUEsRUFDakIsYUFBYSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ3hCLE1BQU0sQ0FBQyxpQkFBaUIsYUFBYTtBQUN2QztBQUNBLElBQUksZ0JBQWdCO0FBQUEsRUFDbEIsUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQSxFQUMzQixhQUFhLENBQUMsTUFBTSxNQUFNLE1BQU0sSUFBSTtBQUFBLEVBQ3BDLE1BQU0sQ0FBQyxlQUFlLGVBQWUsZUFBZSxhQUFhO0FBQ25FO0FBTUEsSUFBSSxjQUFjO0FBQUEsRUFDaEIsUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHO0FBQUEsRUFDbkUsYUFBYSxDQUFDLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxLQUFLO0FBQUEsRUFDaEcsTUFBTSxDQUFDLFdBQVcsWUFBWSxTQUFTLFNBQVMsT0FBTyxRQUFRLFFBQVEsVUFBVSxhQUFhLFdBQVcsWUFBWSxVQUFVO0FBQ2pJO0FBQ0EsSUFBSSxZQUFZO0FBQUEsRUFDZCxRQUFRLENBQUMsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRztBQUFBLEVBQzFDLE9BQU8sQ0FBQyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJO0FBQUEsRUFDaEQsYUFBYSxDQUFDLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLEtBQUs7QUFBQSxFQUM3RCxNQUFNLENBQUMsVUFBVSxVQUFVLFdBQVcsYUFBYSxZQUFZLFVBQVUsVUFBVTtBQUNyRjtBQUNBLElBQUksa0JBQWtCO0FBQUEsRUFDcEIsUUFBUTtBQUFBLElBQ04sSUFBSTtBQUFBLElBQ0osSUFBSTtBQUFBLElBQ0osVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLGFBQWE7QUFBQSxJQUNYLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixVQUFVO0FBQUEsSUFDVixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsRUFDVDtBQUNGO0FBQ0EsSUFBSSw0QkFBNEI7QUFBQSxFQUM5QixRQUFRO0FBQUEsSUFDTixJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixVQUFVO0FBQUEsSUFDVixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1gsSUFBSTtBQUFBLElBQ0osSUFBSTtBQUFBLElBQ0osVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxFQUNUO0FBQ0Y7QUFDQSxJQUFJLGdCQUFnQixTQUFTQyxlQUFjLGFBQWEsVUFBVTtBQUNoRSxNQUFJLFNBQVMsT0FBTyxXQUFXO0FBUy9CLE1BQUksU0FBUyxTQUFTO0FBQ3RCLE1BQUksU0FBUyxNQUFNLFNBQVMsSUFBSTtBQUM5QixZQUFRLFNBQVMsSUFBSTtBQUFBLE1BQ25CLEtBQUs7QUFDSCxlQUFPLFNBQVM7QUFBQSxNQUNsQixLQUFLO0FBQ0gsZUFBTyxTQUFTO0FBQUEsTUFDbEIsS0FBSztBQUNILGVBQU8sU0FBUztBQUFBLElBQ3BCO0FBQUEsRUFDRjtBQUNBLFNBQU8sU0FBUztBQUNsQjtBQUNBLElBQUksV0FBVztBQUFBLEVBQ2I7QUFBQSxFQUNBLEtBQUssZ0JBQWdCO0FBQUEsSUFDbkIsUUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLEVBQ2hCLENBQUM7QUFBQSxFQUNELFNBQVMsZ0JBQWdCO0FBQUEsSUFDdkIsUUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLElBQ2Qsa0JBQWtCLFNBQVMsaUJBQWlCLFNBQVM7QUFDbkQsYUFBTyxVQUFVO0FBQUEsSUFDbkI7QUFBQSxFQUNGLENBQUM7QUFBQSxFQUNELE9BQU8sZ0JBQWdCO0FBQUEsSUFDckIsUUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLEVBQ2hCLENBQUM7QUFBQSxFQUNELEtBQUssZ0JBQWdCO0FBQUEsSUFDbkIsUUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLEVBQ2hCLENBQUM7QUFBQSxFQUNELFdBQVcsZ0JBQWdCO0FBQUEsSUFDekIsUUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLElBQ2Qsa0JBQWtCO0FBQUEsSUFDbEIsd0JBQXdCO0FBQUEsRUFDMUIsQ0FBQztBQUNIO0FBQ0EsSUFBTyxtQkFBUTs7O0FDOUlBLFNBQVIsYUFBOEIsTUFBTTtBQUN6QyxTQUFPLFNBQVUsUUFBUTtBQUN2QixRQUFJLFVBQVUsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ25GLFFBQUksUUFBUSxRQUFRO0FBQ3BCLFFBQUksZUFBZSxTQUFTLEtBQUssY0FBYyxLQUFLLEtBQUssS0FBSyxjQUFjLEtBQUssaUJBQWlCO0FBQ2xHLFFBQUksY0FBYyxPQUFPLE1BQU0sWUFBWTtBQUMzQyxRQUFJLENBQUMsYUFBYTtBQUNoQixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksZ0JBQWdCLFlBQVksQ0FBQztBQUNqQyxRQUFJLGdCQUFnQixTQUFTLEtBQUssY0FBYyxLQUFLLEtBQUssS0FBSyxjQUFjLEtBQUssaUJBQWlCO0FBQ25HLFFBQUksTUFBTSxNQUFNLFFBQVEsYUFBYSxJQUFJLFVBQVUsZUFBZSxTQUFVLFNBQVM7QUFDbkYsYUFBTyxRQUFRLEtBQUssYUFBYTtBQUFBLElBQ25DLENBQUMsSUFBSSxRQUFRLGVBQWUsU0FBVSxTQUFTO0FBQzdDLGFBQU8sUUFBUSxLQUFLLGFBQWE7QUFBQSxJQUNuQyxDQUFDO0FBQ0QsUUFBSTtBQUNKLFlBQVEsS0FBSyxnQkFBZ0IsS0FBSyxjQUFjLEdBQUcsSUFBSTtBQUN2RCxZQUFRLFFBQVEsZ0JBQWdCLFFBQVEsY0FBYyxLQUFLLElBQUk7QUFDL0QsUUFBSSxPQUFPLE9BQU8sTUFBTSxjQUFjLE1BQU07QUFDNUMsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjtBQUNBLFNBQVMsUUFBUSxRQUFRLFdBQVc7QUFDbEMsV0FBUyxPQUFPLFFBQVE7QUFDdEIsUUFBSSxPQUFPLGVBQWUsR0FBRyxLQUFLLFVBQVUsT0FBTyxHQUFHLENBQUMsR0FBRztBQUN4RCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFDQSxTQUFTLFVBQVUsT0FBTyxXQUFXO0FBQ25DLFdBQVMsTUFBTSxHQUFHLE1BQU0sTUFBTSxRQUFRLE9BQU87QUFDM0MsUUFBSSxVQUFVLE1BQU0sR0FBRyxDQUFDLEdBQUc7QUFDekIsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUOzs7QUN6Q2UsU0FBUixvQkFBcUMsTUFBTTtBQUNoRCxTQUFPLFNBQVUsUUFBUTtBQUN2QixRQUFJLFVBQVUsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ25GLFFBQUksY0FBYyxPQUFPLE1BQU0sS0FBSyxZQUFZO0FBQ2hELFFBQUksQ0FBQztBQUFhLGFBQU87QUFDekIsUUFBSSxnQkFBZ0IsWUFBWSxDQUFDO0FBQ2pDLFFBQUksY0FBYyxPQUFPLE1BQU0sS0FBSyxZQUFZO0FBQ2hELFFBQUksQ0FBQztBQUFhLGFBQU87QUFDekIsUUFBSSxRQUFRLEtBQUssZ0JBQWdCLEtBQUssY0FBYyxZQUFZLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQztBQUNuRixZQUFRLFFBQVEsZ0JBQWdCLFFBQVEsY0FBYyxLQUFLLElBQUk7QUFDL0QsUUFBSSxPQUFPLE9BQU8sTUFBTSxjQUFjLE1BQU07QUFDNUMsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjs7O0FDZEEsSUFBSSw0QkFBNEI7QUFDaEMsSUFBSSw0QkFBNEI7QUFDaEMsSUFBSSxtQkFBbUI7QUFBQSxFQUNyQixRQUFRO0FBQUEsRUFDUixhQUFhO0FBQUEsRUFDYixNQUFNO0FBQ1I7QUFDQSxJQUFJLG1CQUFtQjtBQUFBLEVBQ3JCLEtBQUssQ0FBQyxPQUFPLFNBQVM7QUFDeEI7QUFDQSxJQUFJLHVCQUF1QjtBQUFBLEVBQ3pCLFFBQVE7QUFBQSxFQUNSLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFDUjtBQUNBLElBQUksdUJBQXVCO0FBQUEsRUFDekIsS0FBSyxDQUFDLE1BQU0sTUFBTSxNQUFNLElBQUk7QUFDOUI7QUFDQSxJQUFJLHFCQUFxQjtBQUFBLEVBQ3ZCLFFBQVE7QUFBQSxFQUNSLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFDUjtBQUNBLElBQUkscUJBQXFCO0FBQUEsRUFDdkIsUUFBUSxDQUFDLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxLQUFLO0FBQUEsRUFDM0YsS0FBSyxDQUFDLFFBQVEsT0FBTyxTQUFTLFFBQVEsU0FBUyxTQUFTLFNBQVMsUUFBUSxPQUFPLE9BQU8sT0FBTyxLQUFLO0FBQ3JHO0FBQ0EsSUFBSSxtQkFBbUI7QUFBQSxFQUNyQixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxhQUFhO0FBQUEsRUFDYixNQUFNO0FBQ1I7QUFDQSxJQUFJLG1CQUFtQjtBQUFBLEVBQ3JCLFFBQVEsQ0FBQyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxLQUFLO0FBQUEsRUFDeEQsS0FBSyxDQUFDLFFBQVEsT0FBTyxRQUFRLE9BQU8sUUFBUSxPQUFPLE1BQU07QUFDM0Q7QUFDQSxJQUFJLHlCQUF5QjtBQUFBLEVBQzNCLFFBQVE7QUFBQSxFQUNSLEtBQUs7QUFDUDtBQUNBLElBQUkseUJBQXlCO0FBQUEsRUFDM0IsS0FBSztBQUFBLElBQ0gsSUFBSTtBQUFBLElBQ0osSUFBSTtBQUFBLElBQ0osVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUNBLElBQUksUUFBUTtBQUFBLEVBQ1YsZUFBZSxvQkFBb0I7QUFBQSxJQUNqQyxjQUFjO0FBQUEsSUFDZCxjQUFjO0FBQUEsSUFDZCxlQUFlLFNBQVMsY0FBYyxPQUFPO0FBQzNDLGFBQU8sU0FBUyxPQUFPLEVBQUU7QUFBQSxJQUMzQjtBQUFBLEVBQ0YsQ0FBQztBQUFBLEVBQ0QsS0FBSyxhQUFhO0FBQUEsSUFDaEIsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsSUFDbkIsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsRUFDckIsQ0FBQztBQUFBLEVBQ0QsU0FBUyxhQUFhO0FBQUEsSUFDcEIsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsSUFDbkIsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsSUFDbkIsZUFBZSxTQUFTQyxlQUFjLE9BQU87QUFDM0MsYUFBTyxRQUFRO0FBQUEsSUFDakI7QUFBQSxFQUNGLENBQUM7QUFBQSxFQUNELE9BQU8sYUFBYTtBQUFBLElBQ2xCLGVBQWU7QUFBQSxJQUNmLG1CQUFtQjtBQUFBLElBQ25CLGVBQWU7QUFBQSxJQUNmLG1CQUFtQjtBQUFBLEVBQ3JCLENBQUM7QUFBQSxFQUNELEtBQUssYUFBYTtBQUFBLElBQ2hCLGVBQWU7QUFBQSxJQUNmLG1CQUFtQjtBQUFBLElBQ25CLGVBQWU7QUFBQSxJQUNmLG1CQUFtQjtBQUFBLEVBQ3JCLENBQUM7QUFBQSxFQUNELFdBQVcsYUFBYTtBQUFBLElBQ3RCLGVBQWU7QUFBQSxJQUNmLG1CQUFtQjtBQUFBLElBQ25CLGVBQWU7QUFBQSxJQUNmLG1CQUFtQjtBQUFBLEVBQ3JCLENBQUM7QUFDSDtBQUNBLElBQU8sZ0JBQVE7OztBQ25GZixJQUFJLFNBQVM7QUFBQSxFQUNYLE1BQU07QUFBQSxFQUNOLGdCQUFnQjtBQUFBLEVBQ2hCLFlBQVk7QUFBQSxFQUNaLGdCQUFnQjtBQUFBLEVBQ2hCLFVBQVU7QUFBQSxFQUNWLE9BQU87QUFBQSxFQUNQLFNBQVM7QUFBQSxJQUNQLGNBQWM7QUFBQSxJQUNkLHVCQUF1QjtBQUFBLEVBQ3pCO0FBQ0Y7QUFDQSxJQUFPLGdCQUFROzs7QUN6QmYsSUFBTyx3QkFBUTs7O0FDb0JmLElBQUkseUJBQXlCO0FBSTdCLElBQUksNkJBQTZCO0FBQ2pDLElBQUksc0JBQXNCO0FBQzFCLElBQUksb0JBQW9CO0FBQ3hCLElBQUksZ0NBQWdDO0FBc1NyQixTQUFSLE9BQXdCLFdBQVcsZ0JBQWdCLFNBQVM7QUFDakUsTUFBSSxNQUFNLGlCQUFpQixPQUFPLE9BQU8sT0FBTyx1QkFBdUIsa0JBQWtCLHVCQUF1Qix1QkFBdUIsd0JBQXdCLE9BQU8sT0FBTyxPQUFPLHVCQUF1QixrQkFBa0IsdUJBQXVCLHdCQUF3QjtBQUM1USxlQUFhLEdBQUcsU0FBUztBQUN6QixNQUFJLFlBQVksT0FBTyxjQUFjO0FBQ3JDLE1BQUlDLGtCQUFpQixrQkFBa0I7QUFDdkMsTUFBSUMsV0FBVSxRQUFRLGtCQUFrQixZQUFZLFFBQVEsWUFBWSxTQUFTLFNBQVMsUUFBUSxZQUFZLFFBQVEsb0JBQW9CLFNBQVMsa0JBQWtCRCxnQkFBZSxZQUFZLFFBQVEsU0FBUyxTQUFTLE9BQU87QUFDak8sTUFBSSx3QkFBd0IsV0FBVyxTQUFTLFNBQVMsU0FBUyx3QkFBd0IsWUFBWSxRQUFRLFlBQVksU0FBUyxTQUFTLFFBQVEsMkJBQTJCLFFBQVEsMEJBQTBCLFNBQVMsd0JBQXdCLFlBQVksUUFBUSxZQUFZLFNBQVMsVUFBVSxtQkFBbUIsUUFBUSxZQUFZLFFBQVEscUJBQXFCLFNBQVMsVUFBVSx3QkFBd0IsaUJBQWlCLGFBQWEsUUFBUSwwQkFBMEIsU0FBUyxTQUFTLHNCQUFzQiwyQkFBMkIsUUFBUSxVQUFVLFNBQVMsUUFBUUEsZ0JBQWUsMkJBQTJCLFFBQVEsVUFBVSxTQUFTLFNBQVMsd0JBQXdCQSxnQkFBZSxZQUFZLFFBQVEsMEJBQTBCLFNBQVMsVUFBVSx5QkFBeUIsc0JBQXNCLGFBQWEsUUFBUSwyQkFBMkIsU0FBUyxTQUFTLHVCQUF1QiwyQkFBMkIsUUFBUSxVQUFVLFNBQVMsUUFBUSxDQUFDO0FBR3Y3QixNQUFJLEVBQUUseUJBQXlCLEtBQUsseUJBQXlCLElBQUk7QUFDL0QsVUFBTSxJQUFJLFdBQVcsMkRBQTJEO0FBQUEsRUFDbEY7QUFDQSxNQUFJLGVBQWUsV0FBVyxTQUFTLFNBQVMsU0FBUyx3QkFBd0IsWUFBWSxRQUFRLFlBQVksU0FBUyxTQUFTLFFBQVEsa0JBQWtCLFFBQVEsMEJBQTBCLFNBQVMsd0JBQXdCLFlBQVksUUFBUSxZQUFZLFNBQVMsVUFBVSxtQkFBbUIsUUFBUSxZQUFZLFFBQVEscUJBQXFCLFNBQVMsVUFBVSx3QkFBd0IsaUJBQWlCLGFBQWEsUUFBUSwwQkFBMEIsU0FBUyxTQUFTLHNCQUFzQixrQkFBa0IsUUFBUSxVQUFVLFNBQVMsUUFBUUEsZ0JBQWUsa0JBQWtCLFFBQVEsVUFBVSxTQUFTLFNBQVMseUJBQXlCQSxnQkFBZSxZQUFZLFFBQVEsMkJBQTJCLFNBQVMsVUFBVSx5QkFBeUIsdUJBQXVCLGFBQWEsUUFBUSwyQkFBMkIsU0FBUyxTQUFTLHVCQUF1QixrQkFBa0IsUUFBUSxVQUFVLFNBQVMsUUFBUSxDQUFDO0FBRzc0QixNQUFJLEVBQUUsZ0JBQWdCLEtBQUssZ0JBQWdCLElBQUk7QUFDN0MsVUFBTSxJQUFJLFdBQVcsa0RBQWtEO0FBQUEsRUFDekU7QUFDQSxNQUFJLENBQUNDLFFBQU8sVUFBVTtBQUNwQixVQUFNLElBQUksV0FBVyx1Q0FBdUM7QUFBQSxFQUM5RDtBQUNBLE1BQUksQ0FBQ0EsUUFBTyxZQUFZO0FBQ3RCLFVBQU0sSUFBSSxXQUFXLHlDQUF5QztBQUFBLEVBQ2hFO0FBQ0EsTUFBSSxlQUFlLE9BQU8sU0FBUztBQUNuQyxNQUFJLENBQUMsUUFBUSxZQUFZLEdBQUc7QUFDMUIsVUFBTSxJQUFJLFdBQVcsb0JBQW9CO0FBQUEsRUFDM0M7QUFLQSxNQUFJLGlCQUFpQixnQ0FBZ0MsWUFBWTtBQUNqRSxNQUFJLFVBQVUsZ0JBQWdCLGNBQWMsY0FBYztBQUMxRCxNQUFJLG1CQUFtQjtBQUFBLElBQ3JCO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUUE7QUFBQSxJQUNSLGVBQWU7QUFBQSxFQUNqQjtBQUNBLE1BQUksU0FBUyxVQUFVLE1BQU0sMEJBQTBCLEVBQUUsSUFBSSxTQUFVLFdBQVc7QUFDaEYsUUFBSSxpQkFBaUIsVUFBVSxDQUFDO0FBQ2hDLFFBQUksbUJBQW1CLE9BQU8sbUJBQW1CLEtBQUs7QUFDcEQsVUFBSSxnQkFBZ0IsdUJBQWUsY0FBYztBQUNqRCxhQUFPLGNBQWMsV0FBV0EsUUFBTyxVQUFVO0FBQUEsSUFDbkQ7QUFDQSxXQUFPO0FBQUEsRUFDVCxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxzQkFBc0IsRUFBRSxJQUFJLFNBQVUsV0FBVztBQUVqRSxRQUFJLGNBQWMsTUFBTTtBQUN0QixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksaUJBQWlCLFVBQVUsQ0FBQztBQUNoQyxRQUFJLG1CQUFtQixLQUFLO0FBQzFCLGFBQU8sbUJBQW1CLFNBQVM7QUFBQSxJQUNyQztBQUNBLFFBQUksWUFBWSxtQkFBVyxjQUFjO0FBQ3pDLFFBQUksV0FBVztBQUNiLFVBQUksRUFBRSxZQUFZLFFBQVEsWUFBWSxVQUFVLFFBQVEsZ0NBQWdDLHlCQUF5QixTQUFTLEdBQUc7QUFDM0gsNEJBQW9CLFdBQVcsZ0JBQWdCLE9BQU8sU0FBUyxDQUFDO0FBQUEsTUFDbEU7QUFDQSxVQUFJLEVBQUUsWUFBWSxRQUFRLFlBQVksVUFBVSxRQUFRLGlDQUFpQywwQkFBMEIsU0FBUyxHQUFHO0FBQzdILDRCQUFvQixXQUFXLGdCQUFnQixPQUFPLFNBQVMsQ0FBQztBQUFBLE1BQ2xFO0FBQ0EsYUFBTyxVQUFVLFNBQVMsV0FBV0EsUUFBTyxVQUFVLGdCQUFnQjtBQUFBLElBQ3hFO0FBQ0EsUUFBSSxlQUFlLE1BQU0sNkJBQTZCLEdBQUc7QUFDdkQsWUFBTSxJQUFJLFdBQVcsbUVBQW1FLGlCQUFpQixHQUFHO0FBQUEsSUFDOUc7QUFDQSxXQUFPO0FBQUEsRUFDVCxDQUFDLEVBQUUsS0FBSyxFQUFFO0FBQ1YsU0FBTztBQUNUO0FBQ0EsU0FBUyxtQkFBbUIsT0FBTztBQUNqQyxNQUFJLFVBQVUsTUFBTSxNQUFNLG1CQUFtQjtBQUM3QyxNQUFJLENBQUMsU0FBUztBQUNaLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxRQUFRLENBQUMsRUFBRSxRQUFRLG1CQUFtQixHQUFHO0FBQ2xEOzs7QUNqWk8sSUFBTSxxQkFBcUI7QUFDM0IsSUFBTSxpQkFBaUI7QUFDdkIsSUFBTSwwQkFBMEI7QUFDaEMsSUFBTSwyQkFBMkI7QUFDakMsSUFBTSxvQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0hsQyxTQUFvQjtBQUNwQixXQUFzQjtBQUVmLFNBQVMsNkJBQTZCLGdCQUF3QixhQUFxQixhQUE2QjtBQUN0SCxRQUFNLGdCQUFnQixjQUFjLE1BQU07QUFDdkMsUUFBTSxnQkFBZ0IsY0FBYyxNQUFNO0FBQzdDLE1BQUksaUJBQWlCO0FBQ3JCLE1BQUksaUJBQWlCO0FBQ3JCLE1BQUksV0FBVztBQUNmLE1BQUksaUJBQWlCLEtBQU07QUFDMUIsZUFBVztBQUFBLEVBRVosT0FBTztBQUNOLFFBQUksaUJBQWlCLEdBQUc7QUFDdkIsdUJBQWlCO0FBQUEsSUFDbEIsV0FBVyxpQkFBaUIsSUFBSTtBQUMvQix1QkFBaUI7QUFBQSxJQUNsQixXQUFXLGlCQUFpQixJQUFJO0FBQy9CLHVCQUFpQjtBQUFBLElBQ2xCLFdBQVcsaUJBQWlCLElBQUk7QUFDL0IsdUJBQWlCO0FBQUEsSUFDbEIsV0FBVyxpQkFBaUIsSUFBSTtBQUMvQix1QkFBaUI7QUFBQSxJQUNsQixXQUFXLGlCQUFpQixJQUFJO0FBQy9CLHVCQUFpQjtBQUFBLElBQ2xCLE9BQU87QUFDTix1QkFBaUI7QUFBQSxJQUNsQjtBQUVBLFFBQUksZUFBZSxHQUFHO0FBQ3JCLHVCQUFpQjtBQUFBLElBQ2xCLFdBQVcsaUJBQWlCLElBQUk7QUFDL0IsdUJBQWlCO0FBQUEsSUFDbEIsV0FBVyxpQkFBaUIsSUFBSTtBQUMvQix1QkFBaUI7QUFBQSxJQUNsQixPQUFPO0FBQ04sdUJBQWlCO0FBQUEsSUFDbEI7QUFFQSxRQUFJLGtCQUFrQixLQUFLLGtCQUFrQixHQUFHO0FBQy9DLGlCQUFXO0FBQUEsSUFDWixXQUFXLGtCQUFrQixLQUFLLGtCQUFrQixHQUFHO0FBQ3RELGlCQUFXO0FBQUEsSUFDWixXQUFXLGtCQUFrQixLQUFLLGtCQUFrQixHQUFHO0FBQ3RELGlCQUFXO0FBQUEsSUFDWixZQUFZLGtCQUFrQixLQUFLLGtCQUFrQixPQUFPLGtCQUFrQixLQUFLLGtCQUFrQixJQUFJO0FBQ3hHLGlCQUFXO0FBQUEsSUFDWixXQUFXLGtCQUFrQixLQUFLLGtCQUFrQixHQUFHO0FBQ3RELGlCQUFXO0FBQUEsSUFDWixPQUFPO0FBQ04saUJBQVc7QUFBQSxJQUNaO0FBQUEsRUFDRDtBQU1BLFNBQU87QUFDUjtBQUdPLFNBQVMsK0JBQStCLFNBQWlCLFVBQWtCLFFBQWdCLFFBQW9GO0FBRXJMLFFBQU0sMkJBQTJCO0FBSWpDLFFBQU0sa0JBQWtCLFFBQVEsUUFBUSxXQUFXLEVBQUU7QUFJckQsUUFBTSxlQUFlO0FBQ3JCLFFBQU0seUJBQXlCLGdCQUFnQixRQUFRLGNBQWMsQ0FBQ0MsUUFBTyxJQUFJLE9BQU87QUFHdkYsUUFBSSxPQUFPLDBCQUEwQjtBQUNwQyxhQUFPO0FBQUEsSUFDUjtBQUNBLFdBQU9BO0FBQUEsRUFDUixDQUFDO0FBSUQsUUFBTSxnQkFBZ0I7QUFDdEIsUUFBTSx5QkFBeUIsdUJBQXVCLFFBQVEsZUFBZSxFQUFFO0FBSS9FLFFBQU0sV0FBVztBQUNqQixRQUFNLHFCQUFxQix1QkFBdUIsUUFBUSxVQUFVLEVBQUU7QUFJdEUsUUFBTSxZQUFZO0FBQ2xCLFFBQU0sc0JBQXNCLG1CQUFtQixRQUFRLFdBQVcsRUFBRTtBQUlwRSxRQUFNLGtCQUEwQixvQkFDL0IsTUFBTSxJQUFJLEVBQ1YsT0FBTyxVQUFRLEtBQUssS0FBSyxNQUFNLEVBQUUsRUFDakMsT0FBTyxVQUFRLEtBQUssS0FBSyxNQUFNLEtBQUssRUFDcEMsS0FBSyxJQUFJO0FBSVYsUUFBTSxZQUFZLGdCQUFnQjtBQU9sQyxNQUFJLG1CQUFtQjtBQUN2QixNQUFJLFlBQVk7QUFFaEIsTUFBSSxnQkFBZ0I7QUFDcEIsTUFBSSxnQkFBZ0I7QUFFcEIsTUFBRyxVQUFVLE1BQUs7QUFDakIsYUFBUztBQUNULG9CQUFnQjtBQUNoQixvQkFBZ0I7QUFBQSxFQUNqQjtBQUNBLE1BQUcsVUFBVSxNQUFLO0FBQ2pCLGFBQVM7QUFDVCxvQkFBZ0I7QUFDaEIsb0JBQWdCO0FBQUEsRUFDakI7QUFHQSxRQUFNLGlCQUFpQixJQUFJLE9BQU8sR0FBRyxXQUFXLGtCQUFrQixVQUFVLEdBQUc7QUFDNUUsUUFBTSxZQUFZLElBQUksT0FBTyxHQUFHLFdBQVcsa0JBQWtCLFVBQVUsR0FBRztBQUc3RSxRQUFNLHFCQUFxQixRQUFRLE1BQU0sY0FBYztBQUN2RCxNQUFJLG9CQUFvQjtBQUN0Qix1QkFBbUIsbUJBQW1CLEtBQUssRUFBRSxFQUFFLFNBQVUsbUJBQW1CLFNBQVM7QUFHckYsVUFBTSxlQUFlLG1CQUFtQixLQUFLLEVBQUU7QUFDL0MsVUFBTSxjQUFjLGFBQWEsTUFBTSxTQUFTO0FBQ2hELFFBQUksYUFBYTtBQUNmLGtCQUFZLFlBQVksS0FBSyxFQUFFLEVBQUUsU0FBVSxZQUFZLFNBQVM7QUFBQSxJQUNsRTtBQUFBLEVBQ0Y7QUFLQSxTQUFPLEVBQUUsV0FBVyxrQkFBa0IsVUFBVTtBQUVqRDtBQUdPLFNBQVMsb0JBQW9CLFlBQW9CLGVBQXVCLFNBQWlCLGVBQXVCLHdCQUF3QztBQUk5SixNQUFJLGlCQUFpQjtBQUNyQixNQUFHLGNBQWMsd0JBQXdCO0FBQ3hDLHFCQUFpQjtBQUFBLEVBQ2xCLE9BQU87QUFDTixxQkFBaUI7QUFBQSxFQUNsQjtBQUVBLFFBQU0sY0FBdUIsaUJBQWlCLGdCQUFnQixVQUFVO0FBQ3hFLFFBQU0sZ0JBQWdCLGNBQWM7QUFFcEMsTUFBSSxnQkFBZ0IsS0FBSztBQUN4QixXQUFPO0FBQUEsRUFDUixXQUFXLGlCQUFpQixHQUFHO0FBQzlCLFdBQU87QUFBQSxFQUNSLFdBQVcsaUJBQWlCLEdBQUc7QUFDOUIsV0FBTztBQUFBLEVBQ1IsV0FBVyxpQkFBaUIsR0FBRztBQUM5QixXQUFPO0FBQUEsRUFDUixXQUFXLGlCQUFpQixLQUFLO0FBQ2hDLFdBQU87QUFBQSxFQUNSLFdBQVcsaUJBQWlCLEdBQUc7QUFDOUIsV0FBTztBQUFBLEVBQ1IsT0FBTztBQUNOLFdBQU87QUFBQSxFQUNSO0FBQ0Q7QUFHTyxTQUFTLGFBQWEsVUFBMEI7QUFFdEQsTUFBSSxXQUFXLEdBQUc7QUFDakIsV0FBTztBQUFBLEVBQ1IsV0FBVyxXQUFXLEdBQUc7QUFDeEIsV0FBTztBQUFBLEVBQ1IsV0FBVyxXQUFXLEdBQUc7QUFDeEIsV0FBTztBQUFBLEVBQ1IsV0FBVyxXQUFXLEdBQUc7QUFDeEIsV0FBTztBQUFBLEVBQ1IsV0FBVyxXQUFXLElBQUk7QUFDekIsV0FBTztBQUFBLEVBQ1IsV0FBVyxXQUFXLElBQUk7QUFDekIsV0FBTztBQUFBLEVBQ1IsT0FBTztBQUNOLFdBQU87QUFBQSxFQUNSO0FBQ0Q7QUFHTyxTQUFTLFlBQVksWUFBNEI7QUFLN0MsTUFBSSxjQUFjLEdBQUc7QUFDOUIsV0FBTztBQUFBLEVBQ1IsV0FBVyxhQUFhLEdBQUc7QUFDMUIsV0FBTztBQUFBLEVBQ1IsV0FBVyxhQUFhLEdBQUc7QUFDMUIsV0FBTztBQUFBLEVBQ1IsV0FBVyxhQUFhLElBQUk7QUFDM0IsV0FBTztBQUFBLEVBQ1IsV0FBVyxhQUFhLElBQUk7QUFDM0IsV0FBTztBQUFBLEVBQ1IsV0FBVyxjQUFjLE1BQU0sYUFBYSxLQUFNO0FBQ2pELFdBQU87QUFBQSxFQUNSLE9BQU87QUFDTixXQUFPO0FBQUEsRUFDUjtBQUNEO0FBR08sU0FBUyxjQUFjLGVBQXVCLFdBQTJCO0FBQy9FLE1BQUksU0FBUztBQUNiLE1BQUksU0FBUyxlQUFlLEVBQUUsSUFBSSxXQUFVO0FBQzNDLGFBQVMsWUFBWTtBQUFBLEVBQ3RCLFdBQVcsU0FBUyxlQUFlLEVBQUUsSUFBSSxXQUFVO0FBQ2xELGFBQVMsWUFBWTtBQUFBLEVBQ3RCLFdBQVcsU0FBUyxlQUFlLEVBQUUsS0FBSyxXQUFVO0FBQ25ELGFBQVMsWUFBWTtBQUFBLEVBQ3RCLE9BQU87QUFDTixhQUFTLFlBQVk7QUFBQSxFQUN0QjtBQUVBLFNBQU87QUFDUjtBQUdPLFNBQVMsbUJBQW1CLFVBQTBCO0FBQzNELE1BQUksU0FBUyxTQUFTLElBQUk7QUFDM0IsV0FBTztBQUFBLEVBQ04sV0FBVyxTQUFTLFNBQVMsSUFBSTtBQUNsQyxXQUFPO0FBQUEsRUFDTixXQUFXLFNBQVMsU0FBUyxLQUFLO0FBQ25DLFdBQU87QUFBQSxFQUNOLFdBQVcsU0FBUyxTQUFTLEtBQUs7QUFDbkMsV0FBTztBQUFBLEVBQ04sV0FBVyxTQUFTLFNBQVMsS0FBSztBQUNuQyxXQUFPO0FBQUEsRUFDTixXQUFXLFNBQVMsU0FBUyxLQUFLO0FBQ25DLFdBQU87QUFBQSxFQUNOLFdBQVcsU0FBUyxTQUFTLEtBQUs7QUFDbkMsV0FBTztBQUFBLEVBQ04sT0FBTztBQUNSLFdBQU87QUFBQSxFQUNOO0FBQ0Y7QUFHTyxTQUFTLGVBQWUsY0FBOEI7QUFDNUQsTUFBSSxlQUFlLEtBQUs7QUFDdkIsV0FBTztBQUFBLEVBQ1IsV0FBVyxlQUFlLEtBQUs7QUFDOUIsV0FBTztBQUFBLEVBQ1IsV0FBVyxlQUFlLEtBQU07QUFDL0IsV0FBTztBQUFBLEVBQ1IsV0FBVyxlQUFlLE1BQU07QUFDL0IsV0FBTztBQUFBLEVBQ1IsV0FBVyxlQUFlLEtBQU07QUFDL0IsV0FBTztBQUFBLEVBQ1IsV0FBVyxlQUFlLE1BQU07QUFDL0IsV0FBTztBQUFBLEVBQ1IsV0FBVyxlQUFlLEtBQU07QUFDL0IsV0FBTztBQUFBLEVBQ1IsT0FBTztBQUNOLFdBQU87QUFBQSxFQUNSO0FBQ0Q7QUFHTyxTQUFTLG9CQUFvQixZQUEyQjtBQWxTL0Q7QUFvU0MsTUFBSSxDQUFDLFlBQVk7QUFDaEIsV0FBTztBQUFBLEVBQ1I7QUFDQSxRQUFNLFdBQVUsU0FBSSxjQUFjLGFBQWEsVUFBVSxNQUF6QyxtQkFBNEM7QUFDNUQsU0FBTyxVQUFVLE9BQU8sS0FBSyxPQUFPLEVBQUUsU0FBUztBQUNoRDtBQUdPLFNBQVMsNEJBQTRCLFNBQWlCLFVBQTBCO0FBRXRGLFFBQU0sMkJBQTJCO0FBSWpDLFFBQU0sa0JBQWtCLFFBQVEsUUFBUSxXQUFXLEVBQUU7QUFJckQsUUFBTSxlQUFlO0FBQ3JCLFFBQU0seUJBQXlCLGdCQUFnQixRQUFRLGNBQWMsQ0FBQ0EsUUFBTyxJQUFJLE9BQU87QUFHdkYsUUFBSSxPQUFPLDBCQUEwQjtBQUNwQyxhQUFPO0FBQUEsSUFDUjtBQUNBLFdBQU9BO0FBQUEsRUFDUixDQUFDO0FBSUQsUUFBTSxnQkFBZ0I7QUFDdEIsUUFBTSx5QkFBeUIsdUJBQXVCLFFBQVEsZUFBZSxFQUFFO0FBSS9FLFFBQU0sV0FBVztBQUNqQixRQUFNLHFCQUFxQix1QkFBdUIsUUFBUSxVQUFVLEVBQUU7QUFJdEUsUUFBTSxZQUFZO0FBQ2xCLFFBQU0sc0JBQXNCLG1CQUFtQixRQUFRLFdBQVcsRUFBRTtBQUlwRSxRQUFNLGtCQUEwQixvQkFDL0IsTUFBTSxJQUFJLEVBQ1YsT0FBTyxVQUFRLEtBQUssS0FBSyxNQUFNLEVBQUUsRUFDakMsT0FBTyxVQUFRLEtBQUssS0FBSyxNQUFNLEtBQUssRUFDcEMsS0FBSyxJQUFJO0FBSVYsUUFBTSxZQUFZLGdCQUFnQjtBQUdsQyxTQUFPO0FBQ1I7QUE2Q08sU0FBUyxjQUFjLE1BQXFCO0FBQy9DLFFBQU0sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUk7QUFDdEQsUUFBTSxFQUFFLE1BQUFDLE1BQUssSUFBSTtBQUVqQixRQUFNLGFBQWEsT0FBTyxPQUFPLGFBQWEsRUFDekMsSUFBSSxDQUFDLFFBQWdDO0FBL1k5QztBQStZaUQscUJBQUlBLEtBQUksTUFBUixZQUFhO0FBQUEsR0FBQyxFQUN0RCxPQUFPLENBQUMsTUFBTSxVQUFVLE9BQU8sT0FBTyxDQUFDO0FBRTVDLFNBQU87QUFDWDtBQUdPLElBQU0sa0JBQWtCLE9BQU9DLE1BQVUsWUFBb0Isa0JBQXdEO0FBRXhILFFBQU0sRUFBRSxNQUFNLElBQUlBO0FBSXJCLE1BQUkscUJBQWdDLENBQUM7QUFDckMsTUFBSSxjQUFjLFFBQVc7QUFDNUIseUJBQXFCLENBQUM7QUFBQSxFQUN2QixPQUFPO0FBQ04seUJBQXFCLFdBQVcsTUFBTSxJQUFJO0FBQUEsRUFDM0M7QUFJQSxNQUFJLGtCQUE2QixDQUFDO0FBQ2xDLE1BQUksaUJBQWlCLFFBQVc7QUFDL0Isc0JBQWtCLENBQUM7QUFBQSxFQUNwQixPQUFPO0FBQ04sc0JBQWtCLGNBQWMsTUFBTSxJQUFJO0FBQUEsRUFDM0M7QUFDQSxrQkFBZ0IsS0FBSyxhQUFhLFFBQVE7QUFFdkMsUUFBTSxlQUFlLG9CQUFJLElBQW9CO0FBRTdDLFFBQU0sUUFBUSxNQUFNLE1BQU0saUJBQWlCO0FBRTNDLGFBQVcsUUFBUSxPQUFPO0FBRTVCLFVBQU0sV0FBVyxLQUFLO0FBRWhCLFVBQU0sZUFBZSxhQUFhLElBQUksUUFBUSxLQUFLO0FBRW5ELGlCQUFhLElBQUksVUFBVSxlQUFlLENBQUM7QUFFakQsVUFBTSxlQUFlLE1BQU1BLEtBQUksTUFBTSxLQUFLLElBQUk7QUFFeEMsUUFBSSxDQUFDLG1CQUFtQixLQUFLLGVBQWEsYUFBYSxTQUFTLFNBQVMsQ0FBQyxLQUN0RSxDQUFDLGdCQUFnQixLQUFLLFlBQVUsS0FBSyxLQUFLLFNBQVMsTUFBTSxDQUFDLEdBQUc7QUFFN0QsWUFBTUMsWUFBVyxLQUFLO0FBRXRCLFlBQU1DLGdCQUFlLGFBQWEsSUFBSUQsU0FBUSxLQUFLO0FBRW5ELG1CQUFhLElBQUlBLFdBQVVDLGdCQUFlLENBQUM7QUFBQSxJQUMvQztBQUFBLEVBRUo7QUFFQSxTQUFPO0FBQ1g7QUFHTyxJQUFNLGFBQWEsT0FBT0YsTUFBVSxZQUFvQixrQkFBNEM7QUFFdkcsUUFBTSxFQUFFLE1BQU0sSUFBSUE7QUFHckIsTUFBSSxxQkFBZ0MsQ0FBQztBQUNyQyxNQUFJLGNBQWMsUUFBVztBQUM1Qix5QkFBcUIsQ0FBQztBQUFBLEVBQ3ZCLE9BQU87QUFDTix5QkFBcUIsV0FBVyxNQUFNLElBQUk7QUFBQSxFQUMzQztBQUdBLE1BQUksa0JBQTZCLENBQUM7QUFDbEMsTUFBSSxpQkFBaUIsUUFBVztBQUMvQixzQkFBa0IsQ0FBQztBQUFBLEVBQ3BCLE9BQU87QUFDTixzQkFBa0IsY0FBYyxNQUFNLElBQUk7QUFBQSxFQUMzQztBQUNBLGtCQUFnQixLQUFLLGFBQWEsUUFBUTtBQUV2QyxNQUFJLFlBQXFCLENBQUM7QUFDMUIsUUFBTSxRQUFRLE1BQU0sTUFBTSxpQkFBaUI7QUFDM0MsYUFBVyxRQUFRLE9BQU87QUFFdEIsVUFBTSxlQUFlLE1BQU1BLEtBQUksTUFBTSxLQUFLLElBQUk7QUFFcEQsU0FBSyxDQUFDLG1CQUFtQixLQUFLLGVBQWEsYUFBYSxTQUFTLFNBQVMsQ0FBQyxLQUFLLFdBQVcsV0FBVyxNQUM1RixDQUFDLGdCQUFnQixLQUFLLFlBQVUsS0FBSyxLQUFLLFNBQVMsTUFBTSxDQUFDLEdBQUc7QUFFdEUsZ0JBQVUsS0FBSyxJQUFJO0FBQUEsSUFDZDtBQUFBLEVBQ0o7QUFDQSxTQUFPO0FBQ1g7OztBQ2hlTyxTQUFTLHlCQUF5QixPQUF1QjtBQUMvRCxNQUFJLHVCQUE4QixNQUFNLENBQUM7QUFDekMsYUFBVyxRQUFRLE9BQU87QUFDekIsUUFBSSxLQUFLLEtBQUssUUFBUSxxQkFBcUIsS0FBSyxPQUFPO0FBQ3RELDZCQUF1QjtBQUFBLElBQ3hCO0FBQUEsRUFDRDtBQUNBLFNBQU87QUFDUjtBQWlCTyxTQUFTLGNBQWMsWUFBa0IsVUFBd0I7QUFDdkUsTUFBSSxTQUFVLFNBQVMsU0FBUyxJQUFJLFdBQVcsU0FBUyxJQUFLO0FBQzdELE1BQUksU0FBUyxZQUFZLElBQUksV0FBVyxZQUFZLEdBQUc7QUFDdEQsZUFBVyxTQUFTLFlBQVksSUFBSSxXQUFXLFlBQVksS0FBRztBQUFBLEVBQy9EO0FBQ0EsU0FBTztBQUNSO0FBY08sU0FBUyxxQkFBcUIsT0FBNkI7QUFDakUsUUFBTSxnQkFBNkIsQ0FBQztBQUVwQyxhQUFXLFFBQVEsT0FBTztBQUN6QixrQkFBYyxLQUFLLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxDQUFDO0FBQUEsRUFDN0M7QUFFQSxTQUFPO0FBQ1I7QUFHTyxTQUFTLGtCQUFrQixRQUFnQixpQkFBeUIsd0JBQXdDO0FBQ2xILE1BQUksbUJBQW1CO0FBQ3ZCLE1BQUksMEJBQTBCLEdBQUU7QUFDL0IsdUJBQW1CO0FBQUEsRUFDcEIsT0FBTztBQUNOLHVCQUFtQixnQkFBZ0IsTUFBTSxHQUFHLEVBQUUsU0FBUztBQUFBLEVBQ3hEO0FBR0EsU0FBTyxtQ0FBbUMsU0FBUyxpREFBaUQsa0JBQWtCLHFOQUF5TixtQkFBbUI7QUFDblc7QUFHQSxlQUFzQixvQkFBcUIsZ0JBQXdCLFlBQW9CO0FBQ3RGLFFBQU0sZUFBZSxJQUFJLE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CO0FBQzNFLE1BQUksZ0JBQWdCLE1BQU07QUFDekIsWUFBUSxJQUFJLFFBQVEsa0NBQWtDO0FBQ3REO0FBQUEsRUFDQTtBQUNELFFBQU0sT0FBTztBQUViLFFBQU0sVUFBVSxNQUFNLElBQUksTUFBTSxLQUFLLElBQUk7QUFDekMsTUFBSSxZQUEyQjtBQUMvQixNQUFJLE1BQXFCO0FBQ3pCLE1BQUksUUFBdUI7QUFFM0IsUUFBTSxRQUFRLFFBQVEsTUFBTSxJQUFJO0FBQ2hDLFdBQVNHLEtBQUksR0FBR0EsS0FBSSxNQUFNLFFBQVFBLE1BQUs7QUFDdEMsVUFBTSxPQUFPLE1BQU1BLEVBQUMsRUFBRSxLQUFLO0FBQzNCLFFBQUksU0FBUyxlQUFlO0FBQzNCLFVBQUksY0FBYyxNQUFNO0FBQ3ZCLG9CQUFZQTtBQUFBLE1BQ2I7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUNBLE1BQUksYUFBYSxNQUFLO0FBQ3JCLFVBQU07QUFDTixZQUFRLFlBQVk7QUFDcEIsVUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsWUFBWSxHQUFHLE1BQU0sTUFBTSxHQUFHLENBQUM7QUFDM0UsVUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFBQSxFQUNqRDtBQUNEOzs7QUN4R08sU0FBUyxxQkFBcUIsVUFBa0IsVUFBMkI7QUFDaEYsUUFBTSxjQUF3QixDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHO0FBQzdFLE1BQUksZUFBZTtBQUNuQixXQUFTQyxLQUFFLEdBQUdBLEtBQUksWUFBWSxRQUFRQSxNQUFJO0FBQ3hDLFFBQUksV0FBVyxZQUFZQSxFQUFDLEtBQUssWUFBWSxZQUFZQSxFQUFDLEdBQUU7QUFDMUQscUJBQWU7QUFBQSxJQUNqQjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLGlCQUFpQixPQUFlLFFBQXdCO0FBQ3BFLFFBQU0sY0FBd0IsQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRztBQUM3RSxRQUFNLGFBQXNCO0FBQUEsSUFDMUIsRUFBRSxNQUFNLHNCQUFzQixhQUFhLG1MQUFtTCxPQUFPLFVBQVU7QUFBQSxJQUMvTyxFQUFFLE1BQU0sdUJBQXVCLGFBQWEsMEtBQTJLLE9BQU8sV0FBVztBQUFBLElBQ3pPLEVBQUUsTUFBTSx3QkFBd0IsYUFBYSx3TEFBeUwsT0FBTyxXQUFXO0FBQUEsSUFDeFAsRUFBRSxNQUFNLHlCQUF5QixhQUFhLHFKQUFzSixPQUFPLFdBQVc7QUFBQSxJQUN0TixFQUFFLE1BQU0scUJBQXFCLGFBQWEsMEtBQTJLLE9BQU8sV0FBVztBQUFBLElBQ3ZPLEVBQUUsTUFBTSxpQkFBaUIsYUFBYSxpSkFBa0osT0FBTyxXQUFXO0FBQUEsSUFDMU0sRUFBRSxNQUFNLHNCQUFzQixhQUFhLDRJQUE2SSxPQUFPLFdBQVc7QUFBQSxJQUMxTSxFQUFFLE1BQU0sbUJBQW1CLGFBQWEsMElBQTJJLE9BQU8sV0FBVztBQUFBLElBQ3JNLEVBQUUsTUFBTSxvQkFBb0IsYUFBYSwrSEFBZ0ksT0FBTyxXQUFXO0FBQUEsSUFDM0wsRUFBRSxNQUFNLHdCQUF3QixhQUFhLDZJQUE4SSxPQUFPLFdBQVc7QUFBQSxJQUM3TSxFQUFFLE1BQU0sNEJBQTRCLGFBQWEsNkhBQThILE9BQU8sV0FBVztBQUFBLElBQ2pNLEVBQUUsTUFBTSxpQ0FBaUMsYUFBYSxpTkFBaU4sT0FBTyxZQUFhO0FBQUEsRUFDN1I7QUFFQSxNQUFJLFFBQVE7QUFDWixXQUFTQSxLQUFJLEdBQUdBLEtBQUksWUFBWSxRQUFRQSxNQUFLO0FBQzNDLFFBQUksU0FBUyxZQUFZQSxFQUFDLEdBQUc7QUFDM0IsY0FBUUE7QUFBQSxJQUNWLE9BQU87QUFDTDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTyxXQUFXLEtBQUs7QUFDekI7QUFJUSxTQUFTLHFCQUFxQixPQUFzQjtBQUMxRCxRQUFNLGNBQXdCLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHO0FBQ25GLFFBQU0saUJBQTBCO0FBQUEsSUFDOUIsRUFBRSxNQUFNLHdCQUF3QixhQUFhLDhWQUE4VixPQUFPLFVBQVU7QUFBQSxJQUM1WixFQUFFLE1BQU0sbUJBQW1CLGFBQWEsMktBQTJLLE9BQU8sVUFBVTtBQUFBLElBQ3BPLEVBQUUsTUFBTSxpQkFBaUIsYUFBYSxvS0FBcUssT0FBTyxVQUFVO0FBQUEsSUFDNU4sRUFBRSxNQUFNLHFCQUFxQixhQUFhLCtKQUFnSyxPQUFPLFdBQVc7QUFBQSxJQUM1TixFQUFFLE1BQU0sbUJBQW1CLGFBQWEsNElBQTZJLE9BQU8sV0FBVztBQUFBLElBQ3ZNLEVBQUUsTUFBTSx1QkFBdUIsYUFBYSxrSkFBbUosT0FBTyxXQUFXO0FBQUEsSUFDak4sRUFBRSxNQUFNLDBCQUEwQixhQUFhLGtLQUFtSyxPQUFPLFdBQVc7QUFBQSxJQUNwTyxFQUFFLE1BQU0saUJBQWlCLGFBQWEseUpBQTBKLE9BQU8sV0FBVztBQUFBLElBQ2xOLEVBQUUsTUFBTSwwQkFBMEIsYUFBYSxzT0FBdU8sT0FBTyxXQUFXO0FBQUEsSUFDeFMsRUFBRSxNQUFNLGtCQUFrQixhQUFhLDhJQUErSSxPQUFPLFdBQVc7QUFBQSxJQUN4TSxFQUFFLE1BQU0sdUJBQXVCLGFBQWEsb09BQXFPLE9BQU8sV0FBVztBQUFBLElBQ25TLEVBQUUsTUFBTSw0QkFBNEIsYUFBYSx1TUFBd00sT0FBTyxXQUFXO0FBQUEsSUFDM1EsRUFBRSxNQUFNLHVCQUF1QixhQUFhLHFLQUFzSyxPQUFPLFdBQVc7QUFBQSxJQUNwTyxFQUFFLE1BQU0scUJBQXFCLGFBQWEsaVBBQWtQLE9BQU8sWUFBWTtBQUFBLEVBQ2pUO0FBRUEsTUFBSSxRQUFRO0FBQ1osV0FBU0EsS0FBSSxHQUFHQSxLQUFJLFlBQVksUUFBUUEsTUFBSztBQUMzQyxRQUFJLFNBQVMsWUFBWUEsRUFBQyxHQUFHO0FBQzNCLGNBQVFBO0FBQUEsSUFDVixPQUFPO0FBQ0w7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sZUFBZSxLQUFLO0FBQzdCOzs7QUNyRUEsSUFBTSxZQUF5QjtBQUFBLEVBQzdCLEVBQUUsUUFBUSxHQUFHLE9BQU8sR0FBRyxZQUFZLEVBQUM7QUFBQSxFQUNwQyxFQUFFLFFBQVEsR0FBRyxPQUFPLEdBQUcsWUFBWSxJQUFLO0FBQUEsRUFDeEMsRUFBRSxRQUFRLEtBQU0sT0FBTyxHQUFHLFlBQVksSUFBSztBQUFBLEVBQzNDLEVBQUUsUUFBUSxLQUFNLE9BQU8sR0FBRyxZQUFZLEtBQUs7QUFBQSxFQUMzQyxFQUFFLFFBQVEsTUFBTSxPQUFPLEdBQUcsWUFBWSxLQUFNO0FBQUEsRUFDNUMsRUFBRSxRQUFRLE1BQU8sT0FBTyxHQUFHLFlBQVksSUFBTTtBQUFBLEVBQzdDLEVBQUUsUUFBUSxLQUFPLE9BQU8sR0FBRyxZQUFZLElBQU07QUFBQSxFQUM3QyxFQUFFLFFBQVEsS0FBTyxPQUFPLEdBQUcsWUFBWSxJQUFNO0FBQUEsRUFDN0MsRUFBRSxRQUFRLEtBQU8sT0FBTyxHQUFHLFlBQVksS0FBTztBQUFBLEVBQzlDLEVBQUUsUUFBUSxNQUFRLE9BQU8sR0FBRyxZQUFZLEtBQU87QUFBQSxFQUMvQyxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksSUFBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxLQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksSUFBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxLQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2pELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLElBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsS0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxR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QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0scUJBQStCO0FBQUEsRUFDcEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVB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SUFBTSxzQkFBTixjQUFrQyx1QkFBTTtBQUFBO0FBQUEsRUFHdkMsWUFBWUEsTUFBVSxhQUFxQjtBQUMxQyxVQUFNQSxJQUFHO0FBQ1QsU0FBSyxjQUFjO0FBQUEsRUFDcEI7QUFBQSxFQUVBLFNBQVM7QUFDUixVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsUUFBUSxLQUFLLFdBQVc7QUFBQSxFQUNuQztBQUFBLEVBRUEsVUFBVTtBQUNULFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQUEsRUFDakI7QUFDRDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K diff --git a/src/main.ts b/src/main.ts index 1c83eda..0382246 100644 --- a/src/main.ts +++ b/src/main.ts @@ -515,6 +515,8 @@ export default class gamification extends Plugin { await this.updateAvatarPage(this.settings.avatarPageName); console.log(`${newDailyNoteCreationTask}/2 Notes created today.`) } else if (newDailyNoteCreationTask == 2) { + this.increaseStreakbooster(0.1) + await this.saveSettings(); await this.giveStatusPoints(pointsForDailyChallenge) const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge); console.log(`daily Challenge reached! ${newDailyNoteCreationTask}/2 created.`) @@ -558,6 +560,8 @@ export default class gamification extends Plugin { await this.updateAvatarPage(this.settings.avatarPageName); console.log(`${newWeeklyNoteCreationTask}/7 Notes created in a chain.`) } else if (newWeeklyNoteCreationTask == 7) { + this.increaseStreakbooster(1) + await this.saveSettings(); await this.giveStatusPoints(pointsForWeeklyChallenge) console.log(`Weekly Challenge reached! ${newWeeklyNoteCreationTask}/7 created in a chain.`) const message = getRandomMessageWeeklyChallenge(pointsForWeeklyChallenge); From 608f10d3e21c9b3df56a7253800317111a472c48 Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 21:46:04 +0200 Subject: [PATCH 05/15] safe if increase and decreas --- main.js | 8 ++++++-- src/main.ts | 8 ++++++-- src/settings.ts | 6 +++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/main.js b/main.js index f9a1ad3..83df2d2 100644 --- a/main.js +++ b/main.js @@ -65,7 +65,7 @@ var defaultSettings = { weeklyNoteCreationTask: 0, weeklyNoteCreationDate: "12.08.2023", streakbooster: 0, - streakboosterAlive: false + streakboosterDate: "12.08.2023" }; var GamificationPluginSettings = class extends import_obsidian.PluginSettingTab { constructor(app2, plugin) { @@ -2964,6 +2964,8 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` if (!isOneDayBefore(window.moment(this.settings.weeklyNoteCreationDate, "DD.MM.YYYY")) && !isSameDay(window.moment(this.settings.weeklyNoteCreationDate, "DD.MM.YYYY"))) { this.settings.weeklyNoteCreationTask = 0; this.settings.weeklyNoteCreationDate = window.moment().subtract(1, "day").format("DD.MM.YYYY"); + this.decreaseStreakbooster(1); + this.settings.streakboosterDate = window.moment().subtract(1, "day").format("DD.MM.YYYY"); await this.saveSettings(); console.log(`weekly Challenge reseted`); reset = true; @@ -2989,6 +2991,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` console.log(`${newDailyNoteCreationTask}/2 Notes created today.`); } else if (newDailyNoteCreationTask == 2) { this.increaseStreakbooster(0.1); + this.settings.streakboosterDate = window.moment().format("DD.MM.YYYY"); await this.saveSettings(); await this.giveStatusPoints(pointsForDailyChallenge); const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge); @@ -3027,6 +3030,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` console.log(`${newWeeklyNoteCreationTask}/7 Notes created in a chain.`); } else if (newWeeklyNoteCreationTask == 7) { this.increaseStreakbooster(1); + this.settings.streakboosterDate = window.moment().format("DD.MM.YYYY"); await this.saveSettings(); await this.giveStatusPoints(pointsForWeeklyChallenge); console.log(`Weekly Challenge reached! ${newWeeklyNoteCreationTask}/7 created in a chain.`); @@ -3427,4 +3431,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDAuMSlcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgY3JlYXRlZC5gKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpO1xyXG5cdFx0fSBlbHNlIGlmIChpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0Ly8gZG8gbm90aGluZ1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgbm90ZSBjcmVhdGlvbiB3YXMgcmF0ZWQgYWxyZWFkeSB0b2RheS5gKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IDE7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUJlbG93NygpIHtcclxuXHRcdGxldCBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzID0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0aWYgKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPCA3KSB7XHJcblx0XHRcdGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMrKztcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXM7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblxyXG5cdFx0XHRhd2FpdCB0aGlzLmNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24oY3VycmVudFdlZWtseUNyZWF0ZWROb3Rlcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24obmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyKSB7XHJcblx0XHRpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA8PSA2KSB7XHJcblx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9IGVsc2UgaWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPT0gNykge1xyXG5cdFx0XHR0aGlzLmluY3JlYXNlU3RyZWFrYm9vc3RlcigxKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UpXHJcblx0XHRcdGNvbnNvbGUubG9nKGBXZWVrbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwXHJcblx0XHRjb25zdCBiYXJMZW5ndGggPSBNYXRoLnJvdW5kKHByb2dyZXNzYmFyUGVyY2VudCAvIGNoYXJOdW1Qcm9ncmVzc2JhcilcclxuXHRcdHN0YXR1c2Jhci5zZXRUZXh0KGBcdUQ4M0NcdURGQjJ8bHZsOiAke3RoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWx9IHwgJHt0aGlzLmNyZWF0ZVByb2dyZXNzYmFyKGNoYXJOdW1Qcm9ncmVzc2JhciwgYmFyTGVuZ3RoKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyICs9IGluY3JlYXNlVmFsdWVcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC09IGRlY3JlYXNlVmFsdWVcclxuXHRcdGlmIChuZXdWYWx1ZSA8IDApe1xyXG5cdFx0XHRuZXdWYWx1ZSA9IDBcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0fVxyXG5cclxuXHJcblxyXG5cclxuXHRhc3luYyB1cGRhdGVBdmF0YXJQYWdlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdC8vY29uc29sZS5sb2coYGN1cnJlbnQgc3RhdHVzUG9pbnRzOiAke3RoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzfWApXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKicgKyB0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayArICcvMioqICAgfCc7XHJcblx0XHRjb25zdCBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gOiBudW1iZXIgPSA3IC0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0Y29uc3Qgd2Vla2x5Q2hhbGxlbmdlID0gJ3wgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKicgKyB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgKyAnLzcqKiAgIHxcXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW2RheXMgZG9uZSBpbiBhIHJvd11cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XFxuICAgIGRhdGE6IFsnICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgZGF5c0xlZnRJbldlZWtseUNoYWluICsgJ11cXG54TWluOiAwXFxueE1heDogN1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCc7XHJcblxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCAmJiByZWZlcmVuY2UzICE9IG51bGwpe1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSAtIDI7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI0O1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyIC0gMSAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQzID0gcmVmZXJlbmNlMyAtIDEgLTI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDMgPSByZWZlcmVuY2UzICsgMjQgLTI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblxyXG5cclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdQb2ludHNTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgZGFpbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMzID0gWy4uLm5ld0xpbmVzMi5zbGljZSgwLCBzdGFydDMpLCB3ZWVrbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzMi5zbGljZShlbmQzKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJBbGl2ZTogZmFsc2UsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElTZXR0aW5ncyB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIGJpbmRUYWI6IGJvb2xlYW47XG4gIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgbnVtQWxsRmlsZXM6IG51bWJlcjtcbiAgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHN0YXR1c1BvaW50czogbnVtYmVyO1xuICBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBkZWJ1ZzogYm9vbGVhbjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuICBzdHJlYWtib29zdGVyQWxpdmU6IGJvb2xlYW47XG59XG5cblxuZXhwb3J0IGNsYXNzIEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBnYW1pZmljYXRpb247XG4gIFxuICBwdWJsaWMgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kVGFiOiBib29sZWFuO1xuICBwdWJsaWMgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgcHVibGljIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIHB1YmxpYyBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIHB1YmxpYyBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHB1YmxpYyB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgcHVibGljIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBwdWJsaWMgZGVidWc6IGJvb2xlYW47XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlckFsaXZlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUFBLEVBQ2Ysb0JBQW9CO0FBQ3RCO0FBOEJPLElBQU0sNkJBQU4sY0FBeUMsaUNBQWlCO0FBQUEsRUE0QmhFLFlBQVlDLE1BQVUsUUFBc0I7QUFDMUMsVUFBTUEsTUFBSyxNQUFNO0FBQ2pCLFNBQUssU0FBUztBQUFBLEVBQ2hCO0FBQUEsRUFFTyxVQUFnQjtBQUN0QixVQUFNLEVBQUUsWUFBWSxJQUFJO0FBQ3hCLGdCQUFZLFNBQVMscUJBQXFCO0FBQzFDLFNBQUssWUFBWSxNQUFNO0FBRXZCLFVBQU0sWUFB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LEVBQUUsUUFBUSxLQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2pELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLElBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsS0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxR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QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0scUJBQStCO0FBQUEsRUFDcEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVB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SUFBTSxzQkFBTixjQUFrQyx1QkFBTTtBQUFBO0FBQUEsRUFHdkMsWUFBWUEsTUFBVSxhQUFxQjtBQUMxQyxVQUFNQSxJQUFHO0FBQ1QsU0FBSyxjQUFjO0FBQUEsRUFDcEI7QUFBQSxFQUVBLFNBQVM7QUFDUixVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsUUFBUSxLQUFLLFdBQVc7QUFBQSxFQUNuQztBQUFBLEVBRUEsVUFBVTtBQUNULFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQUEsRUFDakI7QUFDRDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLmRlY3JlYXNlU3RyZWFrYm9vc3RlcigxKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDAuMSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlKVxyXG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlVHdvTm90ZUNoYWxsZW5nZShwb2ludHNGb3JEYWlseUNoYWxsZW5nZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZWFjaGVkISAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBjcmVhdGVkLmApXHJcblx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHQvLyBkbyBub3RoaW5nXHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBub3RlIGNyZWF0aW9uIHdhcyByYXRlZCBhbHJlYWR5IHRvZGF5LmApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCkge1xyXG5cdFx0bGV0IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRpZiAoY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA8IDcpIHtcclxuXHRcdFx0Y3VycmVudFdlZWtseUNyZWF0ZWROb3RlcysrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXIpIHtcclxuXHRcdGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrIDw9IDYpIHtcclxuXHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDEpO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSk7XHJcblx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB1cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyOiBIVE1MU3BhbkVsZW1lbnQpe1xyXG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHModGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpXHJcblx0XHRjb25zdCBwcm9ncmVzc2JhclBlcmNlbnQgPSAodGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMFxyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9YClcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyOiBudW1iZXIsIGJhckxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRsZXQgcHJvZ3Jlc3NiYXIgPSAnJ1xyXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gY2hhck51bVByb2dyZXNzYmFyOyBpKyspIHtcclxuXHRcdFx0aWYgKGkgPD0gYmFyTGVuZ3RoKSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJz0nXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJy0nXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9ncmVzc2JhcjtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZFNldHRpbmdzKCknKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0bGV0IHN0cmVha2Jvb3N0ZXIgPSB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXI7XHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3IgPSB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyKSArIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VTdHJlYWtib29zdGVyKGluY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArPSBpbmNyZWFzZVZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZGVjcmVhc2VTdHJlYWtib29zdGVyKGRlY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdGxldCBuZXdWYWx1ZSA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtPSBkZWNyZWFzZVZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmxldmVsQW5kUG9pbnRzXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeZGFpbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UzID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UzID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIHJlYWQgY3VycmVudCBQb2ludHMgZnJvbSBzZXR0aW5nc1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzID0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHJcblx0XHRjb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKG5ld1BvaW50cyk7XHJcblx0XHRsZXQgbmV4dExldmVsQXQgPSB0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsO1xyXG5cdFx0bGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA8IGxldmVsLmxldmVsKXtcclxuXHRcdFx0Ly8gTGV2ZWwgVXAgYXJjaGl2ZWRcclxuXHRcdFx0bmV3IE5vdGljZShgV2l0aCAke25ld1BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsLmxldmVsfS5gKVxyXG5cdFx0XHQvLyBjaGVjayBmaXJzdCBpZiB0aGlzIG1lYW5zIGEgbmV3IGJhZGdlIGJlZm9yZSBpdCBnZXRzIG92ZXJ3cml0dGVuXHJcblx0XHRcdHJlY2VpdmVCYWRnZSA9IGNoZWNrSWZSZWNlaXZlQUJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGxldmVsLmxldmVsKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsID0gbGV2ZWwubGV2ZWw7XHJcblx0XHRcdG5leHRMZXZlbEF0ID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwcm9ncmVzc0JhckVuZCA9IG5leHRMZXZlbEF0IC0gbmV3UG9pbnRzO1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzU3RyaW5nID0gJ3wgKipMZXZlbCoqICB8ICoqJyArIGxldmVsLmxldmVsICsgJyoqIHxcXG58IFBvaW50cyB8ICcgKyBuZXdQb2ludHMgKyAnICAgIHxcXG5ebGV2ZWxBbmRQb2ludHNcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW0V4cHJpcmllbmNlXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXFxuICAgIGRhdGE6IFsnICsgbmV3UG9pbnRzICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgcHJvZ3Jlc3NCYXJFbmQgKyAnXVxcbnhNaW46ICcgKyBsZXZlbC5wb2ludHMgKyAnXFxueE1heDogJyArIGxldmVsLnBvaW50c05leHQgKyAnXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJ1xyXG5cdFx0Y29uc3QgZGFpbHlDaGFsbGVuZ2UgPSAnfCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKionICsgdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgKyAnLzIqKiAgIHwnO1xyXG5cdFx0Y29uc3QgZGF5c0xlZnRJbldlZWtseUNoYWluIDogbnVtYmVyID0gNyAtIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGNvbnN0IHdlZWtseUNoYWxsZW5nZSA9ICd8ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsKXtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAyO1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyNDtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQzID0gcmVmZXJlbmNlMyArIDI0IC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZWNlaXZlQmFkZ2VcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBnaXZlQmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IGJhZGdlLmxldmVsICsgXCI6ICpcIiArIGJhZGdlLm5hbWUgKyBcIipcIil7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDE7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyICsgMjtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqIFwiICsgYmFkZ2UubGV2ZWwgKyBcIlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXVxyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMi5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlSW5pdEJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKipcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgcmVtb3ZlQmFkZ2VzV2hlbkluaXRMZXZlbEhpZ2hlcihhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBsZXZlbDogbnVtYmVyKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgb3V0c3RhbmRpbmdcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyID09IG51bGwpe1xyXG5cdFx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cclxuXHRcdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGxldmVsKSB7XHJcblx0XHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgcmVmZXJlbmNlICsgMSksIC4uLmxpbmVzLnNsaWNlKHJlZmVyZW5jZTIpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBjcmVhdGVDaGFydCh2YXVsdDogVmF1bHQpOiBQcm9taXNlPHN0cmluZz57XHJcblx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RmlsZSA9IGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlcylcclxuXHRcdC8vbGV0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lXHJcblx0XHQvL2lmIChlYXJsaWVzdEZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lICl7XHJcblx0XHRjb25zdCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5tdGltZVxyXG5cdFx0Ly99XHJcblxyXG5cdFx0bGV0IG1vbnRoQ291bnRlciA9IDAgLy9mb3JtYXQobmV3IERhdGUoZWFybGllc3REYXRlKSwgJ01NJyk7XHJcblx0XHRsZXQgZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHQvL2NvbnN0IGZpbGVEYXRlTW9udGhNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgZmlsZURhdGVNb250aE1hcE1vZCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBtb250aGNvdW50ID0gbW9udGhzQmV0d2VlbihuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCBuZXcgRGF0ZSgpKVxyXG5cdFx0bGV0IGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0bGV0IHlMYWJlbCA9IFwiXCJcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBjcmVhdGVkXHJcblx0XHQvKndoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH0qL1xyXG5cclxuXHRcdG1vbnRoQ291bnRlciA9IDBcclxuXHRcdGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgbW9kaWZpZWRcclxuXHRcdHdoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHR5TGFiZWwgPSB5TGFiZWwgKyBkYXRlU3RyaW5nICsgXCIsIFwiXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fVxyXG5cdFx0eUxhYmVsID0geUxhYmVsLnNsaWNlKDAseUxhYmVsLmxlbmd0aC0yKVxyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdC8qY29uc3QgY3JlYXRpb25EYXRlcyA9IGdldENyZWF0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNyZWF0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fSovXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgbW9kIGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdGNvbnN0IG1vZGlmaWNhdGlvbkRhdGVzID0gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgY3JlYXRlZFxyXG5cdFx0LypsZXQgY2hhclN0cmluZ0NyZWF0ZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcCkge1xyXG5cdFx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQuc2xpY2UoMCxjaGFyU3RyaW5nQ3JlYXRlZC5sZW5ndGgtMikqL1xyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBtb2RpZmllZFxyXG5cdFx0bGV0IGNoYXJTdHJpbmdNb2RpZmllZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwTW9kKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGtleTogJHtrZXl9LCB2YWx1ZTogJHt2YWx1ZX1gKTtcclxuXHRcdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZC5zbGljZSgwLGNoYXJTdHJpbmdNb2RpZmllZC5sZW5ndGgtMilcclxuXHJcblx0XHRyZXR1cm4gY3JlYXRlQ2hhcnRGb3JtYXQoeUxhYmVsLCBjaGFyU3RyaW5nTW9kaWZpZWQsIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbDogUHJvbWlzZTxib29sZWFuPil7XHJcblx0XHRuZXdMZXZlbC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pPT4ge1xyXG5cdFx0XHRpZihyZXN1bHQpe1xyXG5cdFx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGZhbHNlKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhgYmFkZ2UgZm9yIGxldmVsICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gaXMgJHtiYWRnZS5uYW1lfSAtICR7YmFkZ2UubGV2ZWx9YClcclxuXHRcdFx0XHR0aGlzLmdpdmVCYWRnZUluUHJvZmlsZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBiYWRnZSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0XHRcdHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVtb3ZlS2V5c0Zyb21Gcm9udG1hdHRlcigpIHtcclxuXHRcdC8vY29uc3QgeyBWYXVsdCwgVEZpbGUgfSA9IHdpbmRvdy5hcHA7XHJcblx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcFxyXG5cdFx0Ly9jb25zdCB2YXVsdCA9IFZhdWx0LnJlb3BlbigpO1xyXG5cclxuXHRcdC8vIEdldCBhbGwgTWFya2Rvd24gZmlsZXMgaW4gdGhlIHZhdWx0XHJcblx0XHQvL2NvbnN0IG1hcmtkb3duRmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXAgPSBhd2FpdCBnZXRGaWxlQ291bnRNYXAodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MudGFnc0V4Y2x1ZGUsIHRoaXMuc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSk7XHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcC5rZXlzKCkpIHtcclxuXHRcdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRGaWxlcygpO1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZXMuZmluZChmaWxlID0+IGZpbGUuYmFzZW5hbWUgPT09IGZpbGVOYW1lKTtcclxuXHRcdFx0aWYgKCFmaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGBGaWxlICR7ZmlsZU5hbWV9IG5vdCBmb3VuZC5gKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL2NvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWV9YCk7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIG5ldyBOb3RpY2UoYFJlbW92ZWQgc3BlY2lmaWVkIGtleXMgZnJvbSBmcm9udG1hdHRlciBmcm9tIGZpbGUgXFxcIiR7ZmlsZU5hbWV9XFxcIi5gKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHdoaWNoTGV2ZWxOZXh0QmFkZ2UoY3VycmVudExldmVsOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj57XHJcblx0XHRsZXQgbmV4dEJhZGdlTGV2ZWwgPSAwXHJcblx0XHRmb3IgKGxldCBpID0gY3VycmVudExldmVsOyBpIDwgMTEwOyBpKyspe1xyXG5cdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChpLCB0cnVlKVxyXG5cdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdGNvbnN0IG1hdGNoID0gYmFkZ2UubGV2ZWwubWF0Y2gobGV2ZWxSZWdleCk7XHJcblx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBjdXJyZW50TGV2ZWwgJiYgbmV4dEJhZGdlTGV2ZWwgPT0gMCApIHtcclxuXHRcdFx0XHRcdG5leHRCYWRnZUxldmVsID0gbGV2ZWxOdW1iZXI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV4dEJhZGdlTGV2ZWxcclxuXHR9XHJcblxyXG5cdGFzeW5jIGJvb3N0ZXJGb3JJbml0KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcblx0XHRjb25zdCBuZXh0QmFkZ2VBdCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0Y29uc3Qgc3RhdHVzUG9pbnRzVG9SZWFjaCA9IHN0YXR1c1BvaW50c0ZvckxldmVsKG5leHRCYWRnZUF0KVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgc3RhdHVzUG9pbnRzVG9SZWFjaCBmb3IgbmV4dCBCYWRnZTogJHtzdGF0dXNQb2ludHNUb1JlYWNofWApXHJcblx0XHQvLyA1MCBOb3RlcyBmcm9tIExldmVsIDEgdG8gNSB0byBnZXQgdGhlIGZpcnN0IGJhZGdlLlxyXG5cdFx0Ly8gMzAwIFBvaW50cyBpbiBhdmVyYWdlIGZvciBhIE5vdGUuXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gTWF0aC5yb3VuZCgoc3RhdHVzUG9pbnRzVG9SZWFjaCAtIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKS81MC8zMDApO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSBib29zdGVyRmFjdG9yXHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gdHJ1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgYm9vc3RlckZha3RvcjogJHtib29zdGVyRmFjdG9yfWApXHJcblx0XHRyZXR1cm4gYm9vc3RlckZhY3RvclxyXG5cdH1cclxuXHJcblx0YXN5bmMgb3BlbkF2YXRhckZpbGUoKSB7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlKXtcclxuXHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk/LnBhdGggfHwgJyc7XHJcblx0XHRcdGF3YWl0IGFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGV4aXN0aW5nRmlsZS5wYXRoLCBzb3VyY2VQYXRoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwiRmlsZSBub3QgZm91bmQgb3IgdW5hYmxlIHRvIG9wZW4uXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpc1NhbWVEYXkoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBjdXJyZW50RGF0ZSA9IHdpbmRvdy5tb21lbnQoKTsgLy8gR2V0IHRoZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gY3VycmVudERhdGUuaXNTYW1lKGlucHV0RGF0ZSwgJ2RheScpOyAvLyBDaGVjayBpZiB0aGV5IGFyZSB0aGUgc2FtZSBkYXlcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPbmVEYXlCZWZvcmUoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBvbmVEYXlCZWZvcmVDdXJyZW50ID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKTsgLy8gQ2FsY3VsYXRlIG9uZSBkYXkgYmVmb3JlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBpbnB1dERhdGUuaXNTYW1lKG9uZURheUJlZm9yZUN1cnJlbnQsICdkYXknKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXZhdGFyRmlsZShhcHA6IEFwcCwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG5cdC8vc2V0dGluZ3M6IEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzO1xyXG5cdC8vIERlZmluZSB0aGUgZmlsZSBuYW1lIGFuZCBjb250ZW50XHJcblx0Ly9jb25zdCBmaWxlTmFtZSA9ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nOyAvLyB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lO1xyXG5cdC8vY29uc29sZS5sb2coYGZpbGVOYW1lOiAke2ZpbGVOYW1lfWApXHJcblxyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7ZmlsZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2ZpbGVOYW1lfS5tZCBhbHJlYWR5IGV4aXN0c2ApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHQvLyBDcmVhdGUgdGhlIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHZhdWx0XHJcblx0YXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShgJHtmaWxlTmFtZX0ubWRgLCBhdmF0YXJJbml0Q29udGVudCk7XHJcblxyXG59XHJcblxyXG5cclxuY2xhc3MgTW9kYWxJbmZvcm1hdGlvbmJveCBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmc7IC8vIFN0b3JlIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZGlzcGxheVRleHQ6IHN0cmluZykge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dDsgLy8gU3RvcmUgdGhlIHBhc3NlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5zZXRUZXh0KHRoaXMuZGlzcGxheVRleHQpOyAvLyBVc2UgdGhlIHN0b3JlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlRm9ybWF0U3RyaW5ncyhsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpIHtcclxuXHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHJcblx0aWYgKCFhY3RpdmVWaWV3KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gYWN0aXZlIE1hcmtkb3duIHZpZXcgZm91bmQuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgZWRpdG9yID0gYWN0aXZlVmlldy5lZGl0b3I7XHJcblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cclxuXHRpZiAoIXNlbGVjdGVkVGV4dCkge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIHRleHQgc2VsZWN0ZWQgKGZvciBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIHN3aXRjaCBMYXllciAyICYgMykuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0bGV0IHJlcGxhY2VkVGV4dCA9IHNlbGVjdGVkVGV4dC5yZXBsYWNlQWxsKGxheWVyMiwgXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIik7XHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIzLCBcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIsIGxheWVyMilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiLCBsYXllcjMpXHJcblxyXG5cdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHJlcGxhY2VkVGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IG51bWJlciB7XHJcblx0bGV0IHJhdGluZ0Zha3RvcjogbnVtYmVyXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSByYXRpbmdOZXcgLSBwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMClcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gMFxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ0Zha3RvclxyXG59XHJcblxyXG5cclxuXHJcbiAgXHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4iLCAiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IGdhbWlmaWNhdGlvbiBmcm9tICcuL21haW4nO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBQYXJ0aWFsPElTZXR0aW5ncz4gPSB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiB0cnVlLFxuICBiaW5kRW50ZXI6IHRydWUsXG4gIGJpbmRUYWI6IHRydWUsXG4gIGF2YXRhclBhZ2VOYW1lOiAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJyxcbiAgdGFnc0V4Y2x1ZGU6ICcnLFxuICBmb2xkZXJFeGNsdWRlOiAnRXhjYWxpZHJhdycsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiAnPT0nLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogJyoqJyxcbiAgbnVtQWxsRmlsZXM6IDEsXG4gIG51bUFsbEZpbGVzQ291bnQ6IDAsXG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IDAsXG4gIHN0YXR1c1BvaW50czogMCxcbiAgc3RhdHVzTGV2ZWw6IDEsXG4gIHhwRm9yTmV4dExldmVsOiAxMDAwLFxuICBnYW1pZmljYXRpb25TdGFydERhdGU6ICcxMi4wOC4yMDIzJyxcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGZhbHNlLFxuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IDEsXG4gIGRlYnVnOiBmYWxzZSxcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICBzdHJlYWtib29zdGVyOiAwLFxuICBzdHJlYWtib29zdGVyRGF0ZTogJzEyLjA4LjIwMjMnLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2V0dGluZ3Mge1xuICBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgYmluZEVudGVyOiBib29sZWFuO1xuICBiaW5kVGFiOiBib29sZWFuO1xuICBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgc3RyZWFrYm9vc3RlckRhdGU6IHN0cmluZztcbn1cblxuXG5leHBvcnQgY2xhc3MgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcblx0cHJpdmF0ZSByZWFkb25seSBwbHVnaW46IGdhbWlmaWNhdGlvbjtcbiAgXG4gIHB1YmxpYyBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRUYWI6IGJvb2xlYW47XG4gIHB1YmxpYyBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBwdWJsaWMgbnVtQWxsRmlsZXM6IG51bWJlcjtcbiAgcHVibGljIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgcHVibGljIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c1BvaW50czogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIHB1YmxpYyBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcbiAgcHVibGljIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIHB1YmxpYyBkZWJ1ZzogYm9vbGVhbjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHB1YmxpYyBzdHJlYWtib29zdGVyRGF0ZTogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVC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TyxHQUFHLFlBQVksS0FBTztBQUFBLEVBQzlDLEVBQUUsUUFBUSxNQUFRLE9BQU8sR0FBRyxZQUFZLEtBQU87QUFBQSxFQUMvQyxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksSUFBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxLQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksSUFBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxLQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2pELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLElBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsS0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3RELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUN6RDtBQUVPLFNBQVMsa0JBQWtCLFFBQTJCO0FBQzNELE1BQUksUUFBbUIsVUFBVSxDQUFDO0FBQ2xDLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksVUFBVSxLQUFLLFFBQVE7QUFDekIsY0FBUTtBQUFBLElBQ1YsT0FBTztBQUNMO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLHFCQUFxQixhQUE2QjtBQUNoRSxNQUFJLGVBQWU7QUFDbkIsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxlQUFlLEtBQUssU0FBUyxnQkFBZ0IsR0FBRztBQUNsRCxxQkFBZSxLQUFLO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBR0YsU0FBTztBQUNQOzs7QUM5SUYsSUFBTSwwQkFBb0M7QUFBQSxFQUN6QztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0sa0JBQTRCO0FBQUEsRUFDakM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0scUJBQStCO0FBQUEsRUFDcEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFB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TSxlQUFlLE9BQU8sYUFBYTtBQUV6QyxNQUFJLENBQUMsY0FBYztBQUNsQixZQUFRLE1BQU0sc0VBQXNFO0FBQ3BGO0FBQUEsRUFDRDtBQUVBLE1BQUksZUFBZSxhQUFhLFdBQVcsUUFBUSxrQkFBTTtBQUN6RCxpQkFBZSxhQUFhLFdBQVcsUUFBUSwwQkFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsNEJBQVEsTUFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsb0JBQVEsTUFBTTtBQUVyRCxTQUFPLGlCQUFpQixZQUFZO0FBQ3JDO0FBRUEsU0FBUyw2QkFBNkIsZUFBdUIsV0FBMkI7QUFDdkYsTUFBSTtBQUNKLE1BQUksU0FBUyxlQUFlLEVBQUUsSUFBSSxXQUFVO0FBQzNDLG1CQUFlLFlBQVksU0FBUyxlQUFlLEVBQUU7QUFBQSxFQUN0RCxPQUFPO0FBQ04sbUJBQWU7QUFBQSxFQUNoQjtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImFwcCIsICJvYmoiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiTUlMTElTRUNPTkRTX0lOX1dFRUsiLCAiZm9ybWF0dGVycyIsICJsb2NhbGl6ZSIsICJ5IiwgIk0iLCAiZCIsICJhIiwgImgiLCAiSCIsICJtIiwgInMiLCAiUyIsICJkYXRlTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXRMb25nIiwgInRpbWVMb25nRm9ybWF0dGVyIiwgImRhdGVUaW1lTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXQiLCAiZm9ybWF0RGlzdGFuY2UiLCAiZm9ybWF0IiwgImZvcm1hdFJlbGF0aXZlIiwgIm9yZGluYWxOdW1iZXIiLCAidmFsdWVDYWxsYmFjayIsICJkZWZhdWx0T3B0aW9ucyIsICJsb2NhbGUiLCAibWF0Y2giLCAicGF0aCIsICJhcHAiLCAiZmlsZU5hbWUiLCAiY3VycmVudENvdW50IiwgImkiLCAiaSIsICJlIiwgImkiLCAibWF0Y2giLCAiZmlsZSIsICJhcHAiXQp9Cg== diff --git a/src/main.ts b/src/main.ts index 0382246..4b7b768 100644 --- a/src/main.ts +++ b/src/main.ts @@ -486,6 +486,8 @@ export default class gamification extends Plugin { if(!isOneDayBefore(window.moment(this.settings.weeklyNoteCreationDate, 'DD.MM.YYYY')) && !isSameDay(window.moment(this.settings.weeklyNoteCreationDate, 'DD.MM.YYYY'))){ this.settings.weeklyNoteCreationTask = 0; this.settings.weeklyNoteCreationDate = window.moment().subtract(1, 'day').format('DD.MM.YYYY') + this.decreaseStreakbooster(1) + this.settings.streakboosterDate = window.moment().subtract(1, 'day').format('DD.MM.YYYY') await this.saveSettings(); console.log(`weekly Challenge reseted`) reset = true; @@ -516,6 +518,7 @@ export default class gamification extends Plugin { console.log(`${newDailyNoteCreationTask}/2 Notes created today.`) } else if (newDailyNoteCreationTask == 2) { this.increaseStreakbooster(0.1) + this.settings.streakboosterDate = window.moment().format('DD.MM.YYYY'); await this.saveSettings(); await this.giveStatusPoints(pointsForDailyChallenge) const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge); @@ -560,8 +563,9 @@ export default class gamification extends Plugin { await this.updateAvatarPage(this.settings.avatarPageName); console.log(`${newWeeklyNoteCreationTask}/7 Notes created in a chain.`) } else if (newWeeklyNoteCreationTask == 7) { - this.increaseStreakbooster(1) - await this.saveSettings(); + this.increaseStreakbooster(1); + this.settings.streakboosterDate = window.moment().format('DD.MM.YYYY'); + await this.saveSettings(); await this.giveStatusPoints(pointsForWeeklyChallenge) console.log(`Weekly Challenge reached! ${newWeeklyNoteCreationTask}/7 created in a chain.`) const message = getRandomMessageWeeklyChallenge(pointsForWeeklyChallenge); diff --git a/src/settings.ts b/src/settings.ts index adf1afd..5482d14 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -25,7 +25,7 @@ export const defaultSettings: Partial = { weeklyNoteCreationTask: 0, weeklyNoteCreationDate: '12.08.2023', streakbooster: 0, - streakboosterAlive: false, + streakboosterDate: '12.08.2023', }; export interface ISettings { @@ -52,7 +52,7 @@ export interface ISettings { weeklyNoteCreationTask: number; weeklyNoteCreationDate: string; streakbooster: number; - streakboosterAlive: boolean; + streakboosterDate: string; } @@ -82,7 +82,7 @@ export class GamificationPluginSettings extends PluginSettingTab { public weeklyNoteCreationTask: number; public weeklyNoteCreationDate: string; public streakbooster: number; - public streakboosterAlive: boolean; + public streakboosterDate: string; constructor(app: App, plugin: gamification) { super(app, plugin); From c46e7dc1b0ff0fe9c19ae80e3ead5e4dd1b9c4bd Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 22:16:20 +0200 Subject: [PATCH 06/15] booster info in avatar --- main.js | 23 ++++++++++++++++++++--- src/constants.ts | 4 ++++ src/main.ts | 19 ++++++++++++++++--- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/main.js b/main.js index 83df2d2..4baac7f 100644 --- a/main.js +++ b/main.js @@ -1748,6 +1748,10 @@ xTitle: "progress" legend: false \`\`\` +| | | +| ------------------ | ----- | +| **booster factor** | **0** | +^boosterFactor | | | | | ----------- | --- | ----- | | **daily Notes** | *500EP* | **0/2** | @@ -3079,6 +3083,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` async increaseStreakbooster(increaseValue) { this.settings.streakbooster += increaseValue; await this.saveData(this.settings); + console.log(`streakbooster: ${this.settings.streakbooster}`); } async decreaseStreakbooster(decreaseValue) { let newValue = this.settings.streakbooster -= decreaseValue; @@ -3099,12 +3104,15 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` let reference = null; let reference2 = null; let reference3 = null; + let reference4 = null; let end = null; let start = null; let end2 = null; let start2 = null; let end3 = null; let start3 = null; + let end4 = null; + let start4 = null; const lines = content.split("\n"); for (let i2 = 0; i2 < lines.length; i2++) { const line = lines[i2].trim(); @@ -3123,6 +3131,11 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` reference3 = i2; } } + if (line === "^boosterFactor") { + if (reference4 === null) { + reference4 = i2; + } + } } const newPoints = this.settings.statusPoints; const level = getLevelForPoints(newPoints); @@ -3141,17 +3154,21 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` const dailyChallenge = "| **daily Notes** | *500EP* | **" + this.settings.dailyNoteCreationTask + "/2** |"; const daysLeftInWeeklyChain = 7 - this.settings.weeklyNoteCreationTask; const weeklyChallenge = "| **weekly Notes** | *2000EP* | **" + this.settings.weeklyNoteCreationTask + "/7** |\n^weeklyNotesChallenge\n```chart\ntype: bar\nlabels: [days done in a row]\nseries:\n - title: days to do in a row\n data: [" + this.settings.weeklyNoteCreationTask + "]\n - title: points to earn to level up\n data: [" + daysLeftInWeeklyChain + ']\nxMin: 0\nxMax: 7\ntension: 0.2\nwidth: 40%\nlabelColors: false\nfill: false\nbeginAtZero: false\nbestFit: false\nbestFitTitle: undefined\nbestFitNumber: 0\nstacked: true\nindexAxis: y\nxTitle: "progress"\nlegend: false\n```'; - if (reference != null && reference2 != null && reference3 != null) { + const boosterFactor = "| **booster factor** | **" + this.settings.streakbooster + "** |"; + if (reference != null && reference2 != null && reference3 != null && reference4 != null) { start = reference - 2; end = reference + 24; start2 = reference2 - 1 - 25; end2 = reference2 - 25; start3 = reference3 - 1 - 25; end3 = reference3 + 24 - 25; + start4 = reference4 - 1 - 25; + end4 = reference4 - 25; const newLines = [...lines.slice(0, start), newPointsString, ...lines.slice(end)]; const newLines2 = [...newLines.slice(0, start2), dailyChallenge, ...newLines.slice(end2)]; const newLines3 = [...newLines2.slice(0, start3), weeklyChallenge, ...newLines2.slice(end3)]; - await app.vault.modify(file, newLines3.join("\n")); + const newLines4 = [...newLines3.slice(0, start4), boosterFactor, ...newLines3.slice(end4)]; + await app.vault.modify(file, newLines4.join("\n")); } return receiveBadge; } @@ -3431,4 +3448,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLmRlY3JlYXNlU3RyZWFrYm9vc3RlcigxKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDAuMSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlKVxyXG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlVHdvTm90ZUNoYWxsZW5nZShwb2ludHNGb3JEYWlseUNoYWxsZW5nZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZWFjaGVkISAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBjcmVhdGVkLmApXHJcblx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHQvLyBkbyBub3RoaW5nXHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBub3RlIGNyZWF0aW9uIHdhcyByYXRlZCBhbHJlYWR5IHRvZGF5LmApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCkge1xyXG5cdFx0bGV0IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRpZiAoY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA8IDcpIHtcclxuXHRcdFx0Y3VycmVudFdlZWtseUNyZWF0ZWROb3RlcysrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXIpIHtcclxuXHRcdGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrIDw9IDYpIHtcclxuXHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDEpO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSk7XHJcblx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB1cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyOiBIVE1MU3BhbkVsZW1lbnQpe1xyXG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHModGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpXHJcblx0XHRjb25zdCBwcm9ncmVzc2JhclBlcmNlbnQgPSAodGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMFxyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9YClcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyOiBudW1iZXIsIGJhckxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRsZXQgcHJvZ3Jlc3NiYXIgPSAnJ1xyXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gY2hhck51bVByb2dyZXNzYmFyOyBpKyspIHtcclxuXHRcdFx0aWYgKGkgPD0gYmFyTGVuZ3RoKSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJz0nXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJy0nXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9ncmVzc2JhcjtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZFNldHRpbmdzKCknKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0bGV0IHN0cmVha2Jvb3N0ZXIgPSB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXI7XHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3IgPSB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyKSArIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VTdHJlYWtib29zdGVyKGluY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArPSBpbmNyZWFzZVZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZGVjcmVhc2VTdHJlYWtib29zdGVyKGRlY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdGxldCBuZXdWYWx1ZSA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtPSBkZWNyZWFzZVZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmxldmVsQW5kUG9pbnRzXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeZGFpbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UzID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UzID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIHJlYWQgY3VycmVudCBQb2ludHMgZnJvbSBzZXR0aW5nc1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzID0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHJcblx0XHRjb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKG5ld1BvaW50cyk7XHJcblx0XHRsZXQgbmV4dExldmVsQXQgPSB0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsO1xyXG5cdFx0bGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA8IGxldmVsLmxldmVsKXtcclxuXHRcdFx0Ly8gTGV2ZWwgVXAgYXJjaGl2ZWRcclxuXHRcdFx0bmV3IE5vdGljZShgV2l0aCAke25ld1BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsLmxldmVsfS5gKVxyXG5cdFx0XHQvLyBjaGVjayBmaXJzdCBpZiB0aGlzIG1lYW5zIGEgbmV3IGJhZGdlIGJlZm9yZSBpdCBnZXRzIG92ZXJ3cml0dGVuXHJcblx0XHRcdHJlY2VpdmVCYWRnZSA9IGNoZWNrSWZSZWNlaXZlQUJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGxldmVsLmxldmVsKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsID0gbGV2ZWwubGV2ZWw7XHJcblx0XHRcdG5leHRMZXZlbEF0ID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwcm9ncmVzc0JhckVuZCA9IG5leHRMZXZlbEF0IC0gbmV3UG9pbnRzO1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzU3RyaW5nID0gJ3wgKipMZXZlbCoqICB8ICoqJyArIGxldmVsLmxldmVsICsgJyoqIHxcXG58IFBvaW50cyB8ICcgKyBuZXdQb2ludHMgKyAnICAgIHxcXG5ebGV2ZWxBbmRQb2ludHNcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW0V4cHJpcmllbmNlXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXFxuICAgIGRhdGE6IFsnICsgbmV3UG9pbnRzICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgcHJvZ3Jlc3NCYXJFbmQgKyAnXVxcbnhNaW46ICcgKyBsZXZlbC5wb2ludHMgKyAnXFxueE1heDogJyArIGxldmVsLnBvaW50c05leHQgKyAnXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJ1xyXG5cdFx0Y29uc3QgZGFpbHlDaGFsbGVuZ2UgPSAnfCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKionICsgdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgKyAnLzIqKiAgIHwnO1xyXG5cdFx0Y29uc3QgZGF5c0xlZnRJbldlZWtseUNoYWluIDogbnVtYmVyID0gNyAtIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGNvbnN0IHdlZWtseUNoYWxsZW5nZSA9ICd8ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsKXtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAyO1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyNDtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQzID0gcmVmZXJlbmNlMyArIDI0IC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZWNlaXZlQmFkZ2VcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBnaXZlQmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IGJhZGdlLmxldmVsICsgXCI6ICpcIiArIGJhZGdlLm5hbWUgKyBcIipcIil7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDE7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyICsgMjtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqIFwiICsgYmFkZ2UubGV2ZWwgKyBcIlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXVxyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMi5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlSW5pdEJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKipcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgcmVtb3ZlQmFkZ2VzV2hlbkluaXRMZXZlbEhpZ2hlcihhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBsZXZlbDogbnVtYmVyKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgb3V0c3RhbmRpbmdcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyID09IG51bGwpe1xyXG5cdFx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cclxuXHRcdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGxldmVsKSB7XHJcblx0XHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgcmVmZXJlbmNlICsgMSksIC4uLmxpbmVzLnNsaWNlKHJlZmVyZW5jZTIpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBjcmVhdGVDaGFydCh2YXVsdDogVmF1bHQpOiBQcm9taXNlPHN0cmluZz57XHJcblx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RmlsZSA9IGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlcylcclxuXHRcdC8vbGV0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lXHJcblx0XHQvL2lmIChlYXJsaWVzdEZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lICl7XHJcblx0XHRjb25zdCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5tdGltZVxyXG5cdFx0Ly99XHJcblxyXG5cdFx0bGV0IG1vbnRoQ291bnRlciA9IDAgLy9mb3JtYXQobmV3IERhdGUoZWFybGllc3REYXRlKSwgJ01NJyk7XHJcblx0XHRsZXQgZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHQvL2NvbnN0IGZpbGVEYXRlTW9udGhNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgZmlsZURhdGVNb250aE1hcE1vZCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBtb250aGNvdW50ID0gbW9udGhzQmV0d2VlbihuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCBuZXcgRGF0ZSgpKVxyXG5cdFx0bGV0IGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0bGV0IHlMYWJlbCA9IFwiXCJcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBjcmVhdGVkXHJcblx0XHQvKndoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH0qL1xyXG5cclxuXHRcdG1vbnRoQ291bnRlciA9IDBcclxuXHRcdGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgbW9kaWZpZWRcclxuXHRcdHdoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHR5TGFiZWwgPSB5TGFiZWwgKyBkYXRlU3RyaW5nICsgXCIsIFwiXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fVxyXG5cdFx0eUxhYmVsID0geUxhYmVsLnNsaWNlKDAseUxhYmVsLmxlbmd0aC0yKVxyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdC8qY29uc3QgY3JlYXRpb25EYXRlcyA9IGdldENyZWF0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNyZWF0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fSovXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgbW9kIGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdGNvbnN0IG1vZGlmaWNhdGlvbkRhdGVzID0gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgY3JlYXRlZFxyXG5cdFx0LypsZXQgY2hhclN0cmluZ0NyZWF0ZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcCkge1xyXG5cdFx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQuc2xpY2UoMCxjaGFyU3RyaW5nQ3JlYXRlZC5sZW5ndGgtMikqL1xyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBtb2RpZmllZFxyXG5cdFx0bGV0IGNoYXJTdHJpbmdNb2RpZmllZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwTW9kKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGtleTogJHtrZXl9LCB2YWx1ZTogJHt2YWx1ZX1gKTtcclxuXHRcdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZC5zbGljZSgwLGNoYXJTdHJpbmdNb2RpZmllZC5sZW5ndGgtMilcclxuXHJcblx0XHRyZXR1cm4gY3JlYXRlQ2hhcnRGb3JtYXQoeUxhYmVsLCBjaGFyU3RyaW5nTW9kaWZpZWQsIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbDogUHJvbWlzZTxib29sZWFuPil7XHJcblx0XHRuZXdMZXZlbC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pPT4ge1xyXG5cdFx0XHRpZihyZXN1bHQpe1xyXG5cdFx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGZhbHNlKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhgYmFkZ2UgZm9yIGxldmVsICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gaXMgJHtiYWRnZS5uYW1lfSAtICR7YmFkZ2UubGV2ZWx9YClcclxuXHRcdFx0XHR0aGlzLmdpdmVCYWRnZUluUHJvZmlsZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBiYWRnZSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0XHRcdHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVtb3ZlS2V5c0Zyb21Gcm9udG1hdHRlcigpIHtcclxuXHRcdC8vY29uc3QgeyBWYXVsdCwgVEZpbGUgfSA9IHdpbmRvdy5hcHA7XHJcblx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcFxyXG5cdFx0Ly9jb25zdCB2YXVsdCA9IFZhdWx0LnJlb3BlbigpO1xyXG5cclxuXHRcdC8vIEdldCBhbGwgTWFya2Rvd24gZmlsZXMgaW4gdGhlIHZhdWx0XHJcblx0XHQvL2NvbnN0IG1hcmtkb3duRmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXAgPSBhd2FpdCBnZXRGaWxlQ291bnRNYXAodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MudGFnc0V4Y2x1ZGUsIHRoaXMuc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSk7XHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcC5rZXlzKCkpIHtcclxuXHRcdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRGaWxlcygpO1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZXMuZmluZChmaWxlID0+IGZpbGUuYmFzZW5hbWUgPT09IGZpbGVOYW1lKTtcclxuXHRcdFx0aWYgKCFmaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGBGaWxlICR7ZmlsZU5hbWV9IG5vdCBmb3VuZC5gKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL2NvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWV9YCk7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIG5ldyBOb3RpY2UoYFJlbW92ZWQgc3BlY2lmaWVkIGtleXMgZnJvbSBmcm9udG1hdHRlciBmcm9tIGZpbGUgXFxcIiR7ZmlsZU5hbWV9XFxcIi5gKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHdoaWNoTGV2ZWxOZXh0QmFkZ2UoY3VycmVudExldmVsOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj57XHJcblx0XHRsZXQgbmV4dEJhZGdlTGV2ZWwgPSAwXHJcblx0XHRmb3IgKGxldCBpID0gY3VycmVudExldmVsOyBpIDwgMTEwOyBpKyspe1xyXG5cdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChpLCB0cnVlKVxyXG5cdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdGNvbnN0IG1hdGNoID0gYmFkZ2UubGV2ZWwubWF0Y2gobGV2ZWxSZWdleCk7XHJcblx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBjdXJyZW50TGV2ZWwgJiYgbmV4dEJhZGdlTGV2ZWwgPT0gMCApIHtcclxuXHRcdFx0XHRcdG5leHRCYWRnZUxldmVsID0gbGV2ZWxOdW1iZXI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV4dEJhZGdlTGV2ZWxcclxuXHR9XHJcblxyXG5cdGFzeW5jIGJvb3N0ZXJGb3JJbml0KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcblx0XHRjb25zdCBuZXh0QmFkZ2VBdCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0Y29uc3Qgc3RhdHVzUG9pbnRzVG9SZWFjaCA9IHN0YXR1c1BvaW50c0ZvckxldmVsKG5leHRCYWRnZUF0KVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgc3RhdHVzUG9pbnRzVG9SZWFjaCBmb3IgbmV4dCBCYWRnZTogJHtzdGF0dXNQb2ludHNUb1JlYWNofWApXHJcblx0XHQvLyA1MCBOb3RlcyBmcm9tIExldmVsIDEgdG8gNSB0byBnZXQgdGhlIGZpcnN0IGJhZGdlLlxyXG5cdFx0Ly8gMzAwIFBvaW50cyBpbiBhdmVyYWdlIGZvciBhIE5vdGUuXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gTWF0aC5yb3VuZCgoc3RhdHVzUG9pbnRzVG9SZWFjaCAtIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKS81MC8zMDApO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSBib29zdGVyRmFjdG9yXHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gdHJ1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgYm9vc3RlckZha3RvcjogJHtib29zdGVyRmFjdG9yfWApXHJcblx0XHRyZXR1cm4gYm9vc3RlckZhY3RvclxyXG5cdH1cclxuXHJcblx0YXN5bmMgb3BlbkF2YXRhckZpbGUoKSB7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlKXtcclxuXHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk/LnBhdGggfHwgJyc7XHJcblx0XHRcdGF3YWl0IGFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGV4aXN0aW5nRmlsZS5wYXRoLCBzb3VyY2VQYXRoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwiRmlsZSBub3QgZm91bmQgb3IgdW5hYmxlIHRvIG9wZW4uXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpc1NhbWVEYXkoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBjdXJyZW50RGF0ZSA9IHdpbmRvdy5tb21lbnQoKTsgLy8gR2V0IHRoZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gY3VycmVudERhdGUuaXNTYW1lKGlucHV0RGF0ZSwgJ2RheScpOyAvLyBDaGVjayBpZiB0aGV5IGFyZSB0aGUgc2FtZSBkYXlcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPbmVEYXlCZWZvcmUoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBvbmVEYXlCZWZvcmVDdXJyZW50ID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKTsgLy8gQ2FsY3VsYXRlIG9uZSBkYXkgYmVmb3JlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBpbnB1dERhdGUuaXNTYW1lKG9uZURheUJlZm9yZUN1cnJlbnQsICdkYXknKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXZhdGFyRmlsZShhcHA6IEFwcCwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG5cdC8vc2V0dGluZ3M6IEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzO1xyXG5cdC8vIERlZmluZSB0aGUgZmlsZSBuYW1lIGFuZCBjb250ZW50XHJcblx0Ly9jb25zdCBmaWxlTmFtZSA9ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nOyAvLyB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lO1xyXG5cdC8vY29uc29sZS5sb2coYGZpbGVOYW1lOiAke2ZpbGVOYW1lfWApXHJcblxyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7ZmlsZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2ZpbGVOYW1lfS5tZCBhbHJlYWR5IGV4aXN0c2ApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHQvLyBDcmVhdGUgdGhlIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHZhdWx0XHJcblx0YXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShgJHtmaWxlTmFtZX0ubWRgLCBhdmF0YXJJbml0Q29udGVudCk7XHJcblxyXG59XHJcblxyXG5cclxuY2xhc3MgTW9kYWxJbmZvcm1hdGlvbmJveCBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmc7IC8vIFN0b3JlIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZGlzcGxheVRleHQ6IHN0cmluZykge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dDsgLy8gU3RvcmUgdGhlIHBhc3NlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5zZXRUZXh0KHRoaXMuZGlzcGxheVRleHQpOyAvLyBVc2UgdGhlIHN0b3JlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlRm9ybWF0U3RyaW5ncyhsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpIHtcclxuXHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHJcblx0aWYgKCFhY3RpdmVWaWV3KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gYWN0aXZlIE1hcmtkb3duIHZpZXcgZm91bmQuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgZWRpdG9yID0gYWN0aXZlVmlldy5lZGl0b3I7XHJcblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cclxuXHRpZiAoIXNlbGVjdGVkVGV4dCkge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIHRleHQgc2VsZWN0ZWQgKGZvciBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIHN3aXRjaCBMYXllciAyICYgMykuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0bGV0IHJlcGxhY2VkVGV4dCA9IHNlbGVjdGVkVGV4dC5yZXBsYWNlQWxsKGxheWVyMiwgXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIik7XHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIzLCBcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIsIGxheWVyMilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiLCBsYXllcjMpXHJcblxyXG5cdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHJlcGxhY2VkVGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IG51bWJlciB7XHJcblx0bGV0IHJhdGluZ0Zha3RvcjogbnVtYmVyXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSByYXRpbmdOZXcgLSBwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMClcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gMFxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ0Zha3RvclxyXG59XHJcblxyXG5cclxuXHJcbiAgXHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4iLCAiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IGdhbWlmaWNhdGlvbiBmcm9tICcuL21haW4nO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBQYXJ0aWFsPElTZXR0aW5ncz4gPSB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiB0cnVlLFxuICBiaW5kRW50ZXI6IHRydWUsXG4gIGJpbmRUYWI6IHRydWUsXG4gIGF2YXRhclBhZ2VOYW1lOiAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJyxcbiAgdGFnc0V4Y2x1ZGU6ICcnLFxuICBmb2xkZXJFeGNsdWRlOiAnRXhjYWxpZHJhdycsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiAnPT0nLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogJyoqJyxcbiAgbnVtQWxsRmlsZXM6IDEsXG4gIG51bUFsbEZpbGVzQ291bnQ6IDAsXG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IDAsXG4gIHN0YXR1c1BvaW50czogMCxcbiAgc3RhdHVzTGV2ZWw6IDEsXG4gIHhwRm9yTmV4dExldmVsOiAxMDAwLFxuICBnYW1pZmljYXRpb25TdGFydERhdGU6ICcxMi4wOC4yMDIzJyxcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGZhbHNlLFxuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IDEsXG4gIGRlYnVnOiBmYWxzZSxcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICBzdHJlYWtib29zdGVyOiAwLFxuICBzdHJlYWtib29zdGVyRGF0ZTogJzEyLjA4LjIwMjMnLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2V0dGluZ3Mge1xuICBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgYmluZEVudGVyOiBib29sZWFuO1xuICBiaW5kVGFiOiBib29sZWFuO1xuICBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgc3RyZWFrYm9vc3RlckRhdGU6IHN0cmluZztcbn1cblxuXG5leHBvcnQgY2xhc3MgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcblx0cHJpdmF0ZSByZWFkb25seSBwbHVnaW46IGdhbWlmaWNhdGlvbjtcbiAgXG4gIHB1YmxpYyBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRUYWI6IGJvb2xlYW47XG4gIHB1YmxpYyBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBwdWJsaWMgbnVtQWxsRmlsZXM6IG51bWJlcjtcbiAgcHVibGljIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgcHVibGljIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c1BvaW50czogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIHB1YmxpYyBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcbiAgcHVibGljIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIHB1YmxpYyBkZWJ1ZzogYm9vbGVhbjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHB1YmxpYyBzdHJlYWtib29zdGVyRGF0ZTogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVC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TyxHQUFHLFlBQVksS0FBTztBQUFBLEVBQzlDLEVBQUUsUUFBUSxNQUFRLE9BQU8sR0FBRyxZQUFZLEtBQU87QUFBQSxFQUMvQyxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksSUFBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxLQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksSUFBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxLQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2pELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLElBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsS0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3RELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUN6RDtBQUVPLFNBQVMsa0JBQWtCLFFBQTJCO0FBQzNELE1BQUksUUFBbUIsVUFBVSxDQUFDO0FBQ2xDLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksVUFBVSxLQUFLLFFBQVE7QUFDekIsY0FBUTtBQUFBLElBQ1YsT0FBTztBQUNMO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLHFCQUFxQixhQUE2QjtBQUNoRSxNQUFJLGVBQWU7QUFDbkIsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxlQUFlLEtBQUssU0FBUyxnQkFBZ0IsR0FBRztBQUNsRCxxQkFBZSxLQUFLO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBR0YsU0FBTztBQUNQOzs7QUM5SUYsSUFBTSwwQkFBb0M7QUFBQSxFQUN6QztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0sa0JBQTRCO0FBQUEsRUFDakM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0scUJBQStCO0FBQUEsRUFDcEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFB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TSxlQUFlLE9BQU8sYUFBYTtBQUV6QyxNQUFJLENBQUMsY0FBYztBQUNsQixZQUFRLE1BQU0sc0VBQXNFO0FBQ3BGO0FBQUEsRUFDRDtBQUVBLE1BQUksZUFBZSxhQUFhLFdBQVcsUUFBUSxrQkFBTTtBQUN6RCxpQkFBZSxhQUFhLFdBQVcsUUFBUSwwQkFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsNEJBQVEsTUFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsb0JBQVEsTUFBTTtBQUVyRCxTQUFPLGlCQUFpQixZQUFZO0FBQ3JDO0FBRUEsU0FBUyw2QkFBNkIsZUFBdUIsV0FBMkI7QUFDdkYsTUFBSTtBQUNKLE1BQUksU0FBUyxlQUFlLEVBQUUsSUFBSSxXQUFVO0FBQzNDLG1CQUFlLFlBQVksU0FBUyxlQUFlLEVBQUU7QUFBQSxFQUN0RCxPQUFPO0FBQ04sbUJBQWU7QUFBQSxFQUNoQjtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImFwcCIsICJvYmoiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiTUlMTElTRUNPTkRTX0lOX1dFRUsiLCAiZm9ybWF0dGVycyIsICJsb2NhbGl6ZSIsICJ5IiwgIk0iLCAiZCIsICJhIiwgImgiLCAiSCIsICJtIiwgInMiLCAiUyIsICJkYXRlTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXRMb25nIiwgInRpbWVMb25nRm9ybWF0dGVyIiwgImRhdGVUaW1lTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXQiLCAiZm9ybWF0RGlzdGFuY2UiLCAiZm9ybWF0IiwgImZvcm1hdFJlbGF0aXZlIiwgIm9yZGluYWxOdW1iZXIiLCAidmFsdWVDYWxsYmFjayIsICJkZWZhdWx0T3B0aW9ucyIsICJsb2NhbGUiLCAibWF0Y2giLCAicGF0aCIsICJhcHAiLCAiZmlsZU5hbWUiLCAiY3VycmVudENvdW50IiwgImkiLCAiaSIsICJlIiwgImkiLCAibWF0Y2giLCAiZmlsZSIsICJhcHAiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLmRlY3JlYXNlU3RyZWFrYm9vc3RlcigxKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDAuMSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlKVxyXG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlVHdvTm90ZUNoYWxsZW5nZShwb2ludHNGb3JEYWlseUNoYWxsZW5nZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZWFjaGVkISAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBjcmVhdGVkLmApXHJcblx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHQvLyBkbyBub3RoaW5nXHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBub3RlIGNyZWF0aW9uIHdhcyByYXRlZCBhbHJlYWR5IHRvZGF5LmApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCkge1xyXG5cdFx0bGV0IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRpZiAoY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA8IDcpIHtcclxuXHRcdFx0Y3VycmVudFdlZWtseUNyZWF0ZWROb3RlcysrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXIpIHtcclxuXHRcdGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrIDw9IDYpIHtcclxuXHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDEpO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSk7XHJcblx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB1cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyOiBIVE1MU3BhbkVsZW1lbnQpe1xyXG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHModGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpXHJcblx0XHRjb25zdCBwcm9ncmVzc2JhclBlcmNlbnQgPSAodGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMFxyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9YClcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyOiBudW1iZXIsIGJhckxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRsZXQgcHJvZ3Jlc3NiYXIgPSAnJ1xyXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gY2hhck51bVByb2dyZXNzYmFyOyBpKyspIHtcclxuXHRcdFx0aWYgKGkgPD0gYmFyTGVuZ3RoKSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJz0nXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJy0nXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9ncmVzc2JhcjtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZFNldHRpbmdzKCknKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0bGV0IHN0cmVha2Jvb3N0ZXIgPSB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXI7XHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3IgPSB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyKSArIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VTdHJlYWtib29zdGVyKGluY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArPSBpbmNyZWFzZVZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRjb25zb2xlLmxvZyhgc3RyZWFrYm9vc3RlcjogJHt0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJ9YClcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC09IGRlY3JlYXNlVmFsdWVcclxuXHRcdGlmIChuZXdWYWx1ZSA8IDApe1xyXG5cdFx0XHRuZXdWYWx1ZSA9IDBcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0fVxyXG5cclxuXHJcblxyXG5cclxuXHRhc3luYyB1cGRhdGVBdmF0YXJQYWdlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdC8vY29uc29sZS5sb2coYGN1cnJlbnQgc3RhdHVzUG9pbnRzOiAke3RoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzfWApXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2U0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5sZXZlbEFuZFBvaW50c1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXndlZWtseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMyA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMyA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5ib29zdGVyRmFjdG9yXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlNCA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlNCA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvLyByZWFkIGN1cnJlbnQgUG9pbnRzIGZyb20gc2V0dGluZ3NcclxuXHRcdGNvbnN0IG5ld1BvaW50cyA9IHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblxyXG5cdFx0Y29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhuZXdQb2ludHMpO1xyXG5cdFx0bGV0IG5leHRMZXZlbEF0ID0gdGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbDtcclxuXHRcdGxldCByZWNlaXZlQmFkZ2UgPSBmYWxzZVxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPCBsZXZlbC5sZXZlbCl7XHJcblx0XHRcdC8vIExldmVsIFVwIGFyY2hpdmVkXHJcblx0XHRcdG5ldyBOb3RpY2UoYFdpdGggJHtuZXdQb2ludHN9IHBvaW50cywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgJHtsZXZlbC5sZXZlbH0uYClcclxuXHRcdFx0Ly8gY2hlY2sgZmlyc3QgaWYgdGhpcyBtZWFucyBhIG5ldyBiYWRnZSBiZWZvcmUgaXQgZ2V0cyBvdmVyd3JpdHRlblxyXG5cdFx0XHRyZWNlaXZlQmFkZ2UgPSBjaGVja0lmUmVjZWl2ZUFCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsLCBsZXZlbC5sZXZlbClcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IGxldmVsLmxldmVsO1xyXG5cdFx0XHRuZXh0TGV2ZWxBdCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NCYXJFbmQgPSBuZXh0TGV2ZWxBdCAtIG5ld1BvaW50cztcclxuXHRcdGNvbnN0IG5ld1BvaW50c1N0cmluZyA9ICd8ICoqTGV2ZWwqKiAgfCAqKicgKyBsZXZlbC5sZXZlbCArICcqKiB8XFxufCBQb2ludHMgfCAnICsgbmV3UG9pbnRzICsgJyAgICB8XFxuXmxldmVsQW5kUG9pbnRzXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtFeHByaXJpZW5jZV1cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxcbiAgICBkYXRhOiBbJyArIG5ld1BvaW50cyArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIHByb2dyZXNzQmFyRW5kICsgJ11cXG54TWluOiAnICsgbGV2ZWwucG9pbnRzICsgJ1xcbnhNYXg6ICcgKyBsZXZlbC5wb2ludHNOZXh0ICsgJ1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCdcclxuXHRcdGNvbnN0IGRhaWx5Q2hhbGxlbmdlID0gJ3wgKipkYWlseSBOb3RlcyoqIHwgKjUwMEVQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICcvNyoqICAgfFxcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbZGF5cyBkb25lIGluIGEgcm93XVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcXG4gICAgZGF0YTogWycgKyB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gKyAnXVxcbnhNaW46IDBcXG54TWF4OiA3XFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJztcclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSAnfCAqKmJvb3N0ZXIgZmFjdG9yKiogfCAqKicgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyAnKiogfCdcclxuXHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsICYmIHJlZmVyZW5jZTMgIT0gbnVsbCAmJiByZWZlcmVuY2U0ICE9IG51bGwpe1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSAtIDI7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI0O1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyIC0gMSAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQzID0gcmVmZXJlbmNlMyAtIDEgLTI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDMgPSByZWZlcmVuY2UzICsgMjQgLTI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0NCA9IHJlZmVyZW5jZTQgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCA1NSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kNCA9IHJlZmVyZW5jZTQgLSAyNSA7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCA1NSBpcyBuZWVkZWRcclxuXHRcdFx0XHJcblxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld1BvaW50c1N0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCBkYWlseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczMgPSBbLi4ubmV3TGluZXMyLnNsaWNlKDAsIHN0YXJ0MyksIHdlZWtseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMyLnNsaWNlKGVuZDMpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXM0ID0gWy4uLm5ld0xpbmVzMy5zbGljZSgwLCBzdGFydDQpLCBib29zdGVyRmFjdG9yLCAuLi5uZXdMaW5lczMuc2xpY2UoZW5kNCldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzNC5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZWNlaXZlQmFkZ2VcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBnaXZlQmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IGJhZGdlLmxldmVsICsgXCI6ICpcIiArIGJhZGdlLm5hbWUgKyBcIipcIil7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDE7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyICsgMjtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqIFwiICsgYmFkZ2UubGV2ZWwgKyBcIlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXVxyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMi5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlSW5pdEJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKipcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgcmVtb3ZlQmFkZ2VzV2hlbkluaXRMZXZlbEhpZ2hlcihhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBsZXZlbDogbnVtYmVyKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgb3V0c3RhbmRpbmdcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyID09IG51bGwpe1xyXG5cdFx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cclxuXHRcdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGxldmVsKSB7XHJcblx0XHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgcmVmZXJlbmNlICsgMSksIC4uLmxpbmVzLnNsaWNlKHJlZmVyZW5jZTIpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBjcmVhdGVDaGFydCh2YXVsdDogVmF1bHQpOiBQcm9taXNlPHN0cmluZz57XHJcblx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RmlsZSA9IGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlcylcclxuXHRcdC8vbGV0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lXHJcblx0XHQvL2lmIChlYXJsaWVzdEZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lICl7XHJcblx0XHRjb25zdCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5tdGltZVxyXG5cdFx0Ly99XHJcblxyXG5cdFx0bGV0IG1vbnRoQ291bnRlciA9IDAgLy9mb3JtYXQobmV3IERhdGUoZWFybGllc3REYXRlKSwgJ01NJyk7XHJcblx0XHRsZXQgZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHQvL2NvbnN0IGZpbGVEYXRlTW9udGhNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgZmlsZURhdGVNb250aE1hcE1vZCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBtb250aGNvdW50ID0gbW9udGhzQmV0d2VlbihuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCBuZXcgRGF0ZSgpKVxyXG5cdFx0bGV0IGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0bGV0IHlMYWJlbCA9IFwiXCJcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBjcmVhdGVkXHJcblx0XHQvKndoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH0qL1xyXG5cclxuXHRcdG1vbnRoQ291bnRlciA9IDBcclxuXHRcdGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgbW9kaWZpZWRcclxuXHRcdHdoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHR5TGFiZWwgPSB5TGFiZWwgKyBkYXRlU3RyaW5nICsgXCIsIFwiXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fVxyXG5cdFx0eUxhYmVsID0geUxhYmVsLnNsaWNlKDAseUxhYmVsLmxlbmd0aC0yKVxyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdC8qY29uc3QgY3JlYXRpb25EYXRlcyA9IGdldENyZWF0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNyZWF0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fSovXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgbW9kIGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdGNvbnN0IG1vZGlmaWNhdGlvbkRhdGVzID0gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgY3JlYXRlZFxyXG5cdFx0LypsZXQgY2hhclN0cmluZ0NyZWF0ZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcCkge1xyXG5cdFx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQuc2xpY2UoMCxjaGFyU3RyaW5nQ3JlYXRlZC5sZW5ndGgtMikqL1xyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBtb2RpZmllZFxyXG5cdFx0bGV0IGNoYXJTdHJpbmdNb2RpZmllZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwTW9kKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGtleTogJHtrZXl9LCB2YWx1ZTogJHt2YWx1ZX1gKTtcclxuXHRcdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZC5zbGljZSgwLGNoYXJTdHJpbmdNb2RpZmllZC5sZW5ndGgtMilcclxuXHJcblx0XHRyZXR1cm4gY3JlYXRlQ2hhcnRGb3JtYXQoeUxhYmVsLCBjaGFyU3RyaW5nTW9kaWZpZWQsIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbDogUHJvbWlzZTxib29sZWFuPil7XHJcblx0XHRuZXdMZXZlbC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pPT4ge1xyXG5cdFx0XHRpZihyZXN1bHQpe1xyXG5cdFx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGZhbHNlKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhgYmFkZ2UgZm9yIGxldmVsICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gaXMgJHtiYWRnZS5uYW1lfSAtICR7YmFkZ2UubGV2ZWx9YClcclxuXHRcdFx0XHR0aGlzLmdpdmVCYWRnZUluUHJvZmlsZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBiYWRnZSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0XHRcdHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVtb3ZlS2V5c0Zyb21Gcm9udG1hdHRlcigpIHtcclxuXHRcdC8vY29uc3QgeyBWYXVsdCwgVEZpbGUgfSA9IHdpbmRvdy5hcHA7XHJcblx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcFxyXG5cdFx0Ly9jb25zdCB2YXVsdCA9IFZhdWx0LnJlb3BlbigpO1xyXG5cclxuXHRcdC8vIEdldCBhbGwgTWFya2Rvd24gZmlsZXMgaW4gdGhlIHZhdWx0XHJcblx0XHQvL2NvbnN0IG1hcmtkb3duRmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXAgPSBhd2FpdCBnZXRGaWxlQ291bnRNYXAodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MudGFnc0V4Y2x1ZGUsIHRoaXMuc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSk7XHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcC5rZXlzKCkpIHtcclxuXHRcdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRGaWxlcygpO1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZXMuZmluZChmaWxlID0+IGZpbGUuYmFzZW5hbWUgPT09IGZpbGVOYW1lKTtcclxuXHRcdFx0aWYgKCFmaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGBGaWxlICR7ZmlsZU5hbWV9IG5vdCBmb3VuZC5gKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL2NvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWV9YCk7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIG5ldyBOb3RpY2UoYFJlbW92ZWQgc3BlY2lmaWVkIGtleXMgZnJvbSBmcm9udG1hdHRlciBmcm9tIGZpbGUgXFxcIiR7ZmlsZU5hbWV9XFxcIi5gKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHdoaWNoTGV2ZWxOZXh0QmFkZ2UoY3VycmVudExldmVsOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj57XHJcblx0XHRsZXQgbmV4dEJhZGdlTGV2ZWwgPSAwXHJcblx0XHRmb3IgKGxldCBpID0gY3VycmVudExldmVsOyBpIDwgMTEwOyBpKyspe1xyXG5cdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChpLCB0cnVlKVxyXG5cdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdGNvbnN0IG1hdGNoID0gYmFkZ2UubGV2ZWwubWF0Y2gobGV2ZWxSZWdleCk7XHJcblx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBjdXJyZW50TGV2ZWwgJiYgbmV4dEJhZGdlTGV2ZWwgPT0gMCApIHtcclxuXHRcdFx0XHRcdG5leHRCYWRnZUxldmVsID0gbGV2ZWxOdW1iZXI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV4dEJhZGdlTGV2ZWxcclxuXHR9XHJcblxyXG5cdGFzeW5jIGJvb3N0ZXJGb3JJbml0KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcblx0XHRjb25zdCBuZXh0QmFkZ2VBdCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0Y29uc3Qgc3RhdHVzUG9pbnRzVG9SZWFjaCA9IHN0YXR1c1BvaW50c0ZvckxldmVsKG5leHRCYWRnZUF0KVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgc3RhdHVzUG9pbnRzVG9SZWFjaCBmb3IgbmV4dCBCYWRnZTogJHtzdGF0dXNQb2ludHNUb1JlYWNofWApXHJcblx0XHQvLyA1MCBOb3RlcyBmcm9tIExldmVsIDEgdG8gNSB0byBnZXQgdGhlIGZpcnN0IGJhZGdlLlxyXG5cdFx0Ly8gMzAwIFBvaW50cyBpbiBhdmVyYWdlIGZvciBhIE5vdGUuXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gTWF0aC5yb3VuZCgoc3RhdHVzUG9pbnRzVG9SZWFjaCAtIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKS81MC8zMDApO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSBib29zdGVyRmFjdG9yXHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gdHJ1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgYm9vc3RlckZha3RvcjogJHtib29zdGVyRmFjdG9yfWApXHJcblx0XHRyZXR1cm4gYm9vc3RlckZhY3RvclxyXG5cdH1cclxuXHJcblx0YXN5bmMgb3BlbkF2YXRhckZpbGUoKSB7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlKXtcclxuXHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk/LnBhdGggfHwgJyc7XHJcblx0XHRcdGF3YWl0IGFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGV4aXN0aW5nRmlsZS5wYXRoLCBzb3VyY2VQYXRoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwiRmlsZSBub3QgZm91bmQgb3IgdW5hYmxlIHRvIG9wZW4uXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpc1NhbWVEYXkoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBjdXJyZW50RGF0ZSA9IHdpbmRvdy5tb21lbnQoKTsgLy8gR2V0IHRoZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gY3VycmVudERhdGUuaXNTYW1lKGlucHV0RGF0ZSwgJ2RheScpOyAvLyBDaGVjayBpZiB0aGV5IGFyZSB0aGUgc2FtZSBkYXlcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPbmVEYXlCZWZvcmUoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBvbmVEYXlCZWZvcmVDdXJyZW50ID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKTsgLy8gQ2FsY3VsYXRlIG9uZSBkYXkgYmVmb3JlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBpbnB1dERhdGUuaXNTYW1lKG9uZURheUJlZm9yZUN1cnJlbnQsICdkYXknKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXZhdGFyRmlsZShhcHA6IEFwcCwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG5cdC8vc2V0dGluZ3M6IEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzO1xyXG5cdC8vIERlZmluZSB0aGUgZmlsZSBuYW1lIGFuZCBjb250ZW50XHJcblx0Ly9jb25zdCBmaWxlTmFtZSA9ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nOyAvLyB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lO1xyXG5cdC8vY29uc29sZS5sb2coYGZpbGVOYW1lOiAke2ZpbGVOYW1lfWApXHJcblxyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7ZmlsZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2ZpbGVOYW1lfS5tZCBhbHJlYWR5IGV4aXN0c2ApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHQvLyBDcmVhdGUgdGhlIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHZhdWx0XHJcblx0YXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShgJHtmaWxlTmFtZX0ubWRgLCBhdmF0YXJJbml0Q29udGVudCk7XHJcblxyXG59XHJcblxyXG5cclxuY2xhc3MgTW9kYWxJbmZvcm1hdGlvbmJveCBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmc7IC8vIFN0b3JlIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZGlzcGxheVRleHQ6IHN0cmluZykge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dDsgLy8gU3RvcmUgdGhlIHBhc3NlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5zZXRUZXh0KHRoaXMuZGlzcGxheVRleHQpOyAvLyBVc2UgdGhlIHN0b3JlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlRm9ybWF0U3RyaW5ncyhsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpIHtcclxuXHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHJcblx0aWYgKCFhY3RpdmVWaWV3KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gYWN0aXZlIE1hcmtkb3duIHZpZXcgZm91bmQuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgZWRpdG9yID0gYWN0aXZlVmlldy5lZGl0b3I7XHJcblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cclxuXHRpZiAoIXNlbGVjdGVkVGV4dCkge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIHRleHQgc2VsZWN0ZWQgKGZvciBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIHN3aXRjaCBMYXllciAyICYgMykuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0bGV0IHJlcGxhY2VkVGV4dCA9IHNlbGVjdGVkVGV4dC5yZXBsYWNlQWxsKGxheWVyMiwgXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIik7XHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIzLCBcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIsIGxheWVyMilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiLCBsYXllcjMpXHJcblxyXG5cdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHJlcGxhY2VkVGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IG51bWJlciB7XHJcblx0bGV0IHJhdGluZ0Zha3RvcjogbnVtYmVyXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSByYXRpbmdOZXcgLSBwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMClcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gMFxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ0Zha3RvclxyXG59XHJcblxyXG5cclxuXHJcbiAgXHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4iLCAiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IGdhbWlmaWNhdGlvbiBmcm9tICcuL21haW4nO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBQYXJ0aWFsPElTZXR0aW5ncz4gPSB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiB0cnVlLFxuICBiaW5kRW50ZXI6IHRydWUsXG4gIGJpbmRUYWI6IHRydWUsXG4gIGF2YXRhclBhZ2VOYW1lOiAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJyxcbiAgdGFnc0V4Y2x1ZGU6ICcnLFxuICBmb2xkZXJFeGNsdWRlOiAnRXhjYWxpZHJhdycsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiAnPT0nLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogJyoqJyxcbiAgbnVtQWxsRmlsZXM6IDEsXG4gIG51bUFsbEZpbGVzQ291bnQ6IDAsXG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IDAsXG4gIHN0YXR1c1BvaW50czogMCxcbiAgc3RhdHVzTGV2ZWw6IDEsXG4gIHhwRm9yTmV4dExldmVsOiAxMDAwLFxuICBnYW1pZmljYXRpb25TdGFydERhdGU6ICcxMi4wOC4yMDIzJyxcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGZhbHNlLFxuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IDEsXG4gIGRlYnVnOiBmYWxzZSxcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICBzdHJlYWtib29zdGVyOiAwLFxuICBzdHJlYWtib29zdGVyRGF0ZTogJzEyLjA4LjIwMjMnLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2V0dGluZ3Mge1xuICBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgYmluZEVudGVyOiBib29sZWFuO1xuICBiaW5kVGFiOiBib29sZWFuO1xuICBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgc3RyZWFrYm9vc3RlckRhdGU6IHN0cmluZztcbn1cblxuXG5leHBvcnQgY2xhc3MgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcblx0cHJpdmF0ZSByZWFkb25seSBwbHVnaW46IGdhbWlmaWNhdGlvbjtcbiAgXG4gIHB1YmxpYyBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRUYWI6IGJvb2xlYW47XG4gIHB1YmxpYyBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBwdWJsaWMgbnVtQWxsRmlsZXM6IG51bWJlcjtcbiAgcHVibGljIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgcHVibGljIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c1BvaW50czogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIHB1YmxpYyBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcbiAgcHVibGljIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIHB1YmxpYyBkZWJ1ZzogYm9vbGVhbjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHB1YmxpYyBzdHJlYWtib29zdGVyRGF0ZTogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUFBLEVBQ2YsbUJB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QUFBLEVBQy9DLEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdEQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQ3pEO0FBRU8sU0FBUyxrQkFBa0IsUUFBMkI7QUFDM0QsTUFBSSxRQUFtQixVQUFVLENBQUM7QUFDbEMsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxVQUFVLEtBQUssUUFBUTtBQUN6QixjQUFRO0FBQUEsSUFDVixPQUFPO0FBQ0w7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVPLFNBQVMscUJBQXFCLGFBQTZCO0FBQ2hFLE1BQUksZUFBZTtBQUNuQixhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLGVBQWUsS0FBSyxTQUFTLGdCQUFnQixHQUFHO0FBQ2xELHFCQUFlLEtBQUs7QUFBQSxJQUN0QjtBQUFBLEVBQ0Y7QUFHRixTQUFPO0FBQ1A7OztBQzlJRixJQUFNLDBCQUFvQztBQUFBLEVBQ3pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxrQkFBNEI7QUFBQSxFQUNqQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFD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QUFDdEIsY0FBVSxRQUFRLEtBQUssV0FBVztBQUFBLEVBQ25DO0FBQUEsRUFFQSxVQUFVO0FBQ1QsVUFBTSxFQUFFLFVBQVUsSUFBSTtBQUN0QixjQUFVLE1BQU07QUFBQSxFQUNqQjtBQUNEO0FBR0EsZUFBZSxxQkFBcUIsUUFBZ0IsUUFBZ0I7QUFDbkUsUUFBTSxhQUFhLEtBQUssSUFBSSxVQUFVLG9CQUFvQiw2QkFBWTtBQUV0RSxNQUFJLENBQUMsWUFBWTtBQUNoQixZQUFRLE1BQU0sZ0NBQWdDO0FBQzlDO0FBQUEsRUFDRDtBQUVBLFFBQU0sU0FBUyxXQUFXO0FBQzFCLFFBQU0sZUFBZSxPQUFPLGFBQWE7QUFFekMsTUFBSSxDQUFDLGNBQWM7QUFDbEIsWUFBUSxNQUFNLHNFQUFzRTtBQUNwRjtBQUFBLEVBQ0Q7QUFFQSxNQUFJLGVBQWUsYUFBYSxXQUFXLFFBQVEsa0JBQU07QUFDekQsaUJBQWUsYUFBYSxXQUFXLFFBQVEsMEJBQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLDRCQUFRLE1BQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLG9CQUFRLE1BQU07QUFFckQsU0FBTyxpQkFBaUIsWUFBWTtBQUNyQztBQUVBLFNBQVMsNkJBQTZCLGVBQXVCLFdBQTJCO0FBQ3ZGLE1BQUk7QUFDSixNQUFJLFNBQVMsZUFBZSxFQUFFLElBQUksV0FBVTtBQUMzQyxtQkFBZSxZQUFZLFNBQVMsZUFBZSxFQUFFO0FBQUEsRUFDdEQsT0FBTztBQUNOLG1CQUFlO0FBQUEsRUFDaEI7QUFFQSxTQUFPO0FBQ1I7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAib2JqIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgIk1JTExJU0VDT05EU19JTl9XRUVLIiwgImZvcm1hdHRlcnMiLCAibG9jYWxpemUiLCAieSIsICJNIiwgImQiLCAiYSIsICJoIiwgIkgiLCAibSIsICJzIiwgIlMiLCAiZGF0ZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0TG9uZyIsICJ0aW1lTG9uZ0Zvcm1hdHRlciIsICJkYXRlVGltZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0IiwgImZvcm1hdERpc3RhbmNlIiwgImZvcm1hdCIsICJmb3JtYXRSZWxhdGl2ZSIsICJvcmRpbmFsTnVtYmVyIiwgInZhbHVlQ2FsbGJhY2siLCAiZGVmYXVsdE9wdGlvbnMiLCAibG9jYWxlIiwgIm1hdGNoIiwgInBhdGgiLCAiYXBwIiwgImZpbGVOYW1lIiwgImN1cnJlbnRDb3VudCIsICJpIiwgImkiLCAiZSIsICJpIiwgIm1hdGNoIiwgImZpbGUiLCAiYXBwIl0KfQo= diff --git a/src/constants.ts b/src/constants.ts index 4daab11..9652516 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -33,6 +33,10 @@ xTitle: "progress" legend: false \`\`\` +| | | +| ------------------ | ----- | +| **booster factor** | **0** | +^boosterFactor | | | | | ----------- | --- | ----- | | **daily Notes** | *500EP* | **0/2** | diff --git a/src/main.ts b/src/main.ts index 4b7b768..1032506 100644 --- a/src/main.ts +++ b/src/main.ts @@ -623,6 +623,7 @@ export default class gamification extends Plugin { async increaseStreakbooster(increaseValue:number){ this.settings.streakbooster += increaseValue await this.saveData(this.settings) + console.log(`streakbooster: ${this.settings.streakbooster}`) } @@ -651,12 +652,15 @@ export default class gamification extends Plugin { let reference: number | null = null; let reference2: number | null = null; let reference3: number | null = null; + let reference4: number | null = null; let end: number | null = null; let start: number | null = null; let end2: number | null = null; let start2: number | null = null; let end3: number | null = null; let start3: number | null = null; + let end4: number | null = null; + let start4: number | null = null; const lines = content.split("\n"); for (let i = 0; i < lines.length; i++) { @@ -676,6 +680,11 @@ export default class gamification extends Plugin { reference3 = i; } } + if (line === "^boosterFactor") { + if (reference4 === null) { + reference4 = i; + } + } } // read current Points from settings const newPoints = this.settings.statusPoints @@ -699,20 +708,24 @@ export default class gamification extends Plugin { const dailyChallenge = '| **daily Notes** | *500EP* | **' + this.settings.dailyNoteCreationTask + '/2** |'; const daysLeftInWeeklyChain : number = 7 - this.settings.weeklyNoteCreationTask; const weeklyChallenge = '| **weekly Notes** | *2000EP* | **' + this.settings.weeklyNoteCreationTask + '/7** |\n^weeklyNotesChallenge\n```chart\ntype: bar\nlabels: [days done in a row]\nseries:\n - title: days to do in a row\n data: [' + this.settings.weeklyNoteCreationTask + ']\n - title: points to earn to level up\n data: [' + daysLeftInWeeklyChain + ']\nxMin: 0\nxMax: 7\ntension: 0.2\nwidth: 40%\nlabelColors: false\nfill: false\nbeginAtZero: false\nbestFit: false\nbestFitTitle: undefined\nbestFitNumber: 0\nstacked: true\nindexAxis: y\nxTitle: "progress"\nlegend: false\n```'; + const boosterFactor = '| **booster factor** | **' + this.settings.streakbooster + '** |' - if (reference != null && reference2 != null && reference3 != null){ + if (reference != null && reference2 != null && reference3 != null && reference4 != null){ start = reference - 2; end = reference + 24; start2 = reference2 - 1 - 25; // no idea wby offset 25 is needed end2 = reference2 - 25; // no idea wby offset 25 is needed start3 = reference3 - 1 -25; // no idea wby offset 25 is needed end3 = reference3 + 24 -25; // no idea wby offset 25 is needed - + start4 = reference4 - 1 - 25; // no idea wby offset 55 is needed + end4 = reference4 - 25 ; // no idea wby offset 55 is needed + const newLines = [...lines.slice(0, start), newPointsString, ...lines.slice(end)]; const newLines2 = [...newLines.slice(0, start2), dailyChallenge, ...newLines.slice(end2)]; const newLines3 = [...newLines2.slice(0, start3), weeklyChallenge, ...newLines2.slice(end3)]; - await app.vault.modify(file, newLines3.join("\n")); + const newLines4 = [...newLines3.slice(0, start4), boosterFactor, ...newLines3.slice(end4)]; + await app.vault.modify(file, newLines4.join("\n")); } return receiveBadge } From 526d059cbdb6eb81a0625fb0624f57a9adb81178 Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 22:24:07 +0200 Subject: [PATCH 07/15] correct point information message --- main.js | 8 ++++---- src/main.ts | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/main.js b/main.js index 4baac7f..ea3f1d0 100644 --- a/main.js +++ b/main.js @@ -2931,7 +2931,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` } console.log(`pointsReceived: ${pointsReceived}`); if (pointsReceived > 0) { - const messagePoints = getRandomMessagePoints(pointsReceived * this.settings.badgeBoosterFactor); + const messagePoints = getRandomMessagePoints(pointsReceived * (this.settings.badgeBoosterFactor + this.settings.streakbooster)); new import_obsidian2.Notice(messagePoints); console.log(messagePoints); } @@ -2998,7 +2998,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` this.settings.streakboosterDate = window.moment().format("DD.MM.YYYY"); await this.saveSettings(); await this.giveStatusPoints(pointsForDailyChallenge); - const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge); + const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge * (this.settings.badgeBoosterFactor + this.settings.streakbooster)); console.log(`daily Challenge reached! ${newDailyNoteCreationTask}/2 created.`); new import_obsidian2.Notice(message); console.log(message); @@ -3038,7 +3038,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` await this.saveSettings(); await this.giveStatusPoints(pointsForWeeklyChallenge); console.log(`Weekly Challenge reached! ${newWeeklyNoteCreationTask}/7 created in a chain.`); - const message = getRandomMessageWeeklyChallenge(pointsForWeeklyChallenge); + const message = getRandomMessageWeeklyChallenge(pointsForWeeklyChallenge * (this.settings.badgeBoosterFactor + this.settings.streakbooster)); new import_obsidian2.Notice(message); console.log(message); } else { @@ -3448,4 +3448,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcilcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHQvL2F3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZighaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLmRlY3JlYXNlU3RyZWFrYm9vc3RlcigxKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgd2Vla2x5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpICYmIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KXtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVzZXQpe1xyXG5cdFx0XHQvL3RoaXMuZGFpbHlDaGFsbGVuZ2VVcGRhdGVQcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIDApXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG4gICAgICAgIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPCAyKXtcclxuXHRcdFx0bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrICsrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIE5vdGVzIGNyZWF0ZWQgdG9kYXkuYClcclxuXHRcdFx0fSBlbHNlIGlmIChuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMikge1xyXG5cdFx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDAuMSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlKVxyXG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlVHdvTm90ZUNoYWxsZW5nZShwb2ludHNGb3JEYWlseUNoYWxsZW5nZSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZWFjaGVkISAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBjcmVhdGVkLmApXHJcblx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHQvLyBkbyBub3RoaW5nXHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBub3RlIGNyZWF0aW9uIHdhcyByYXRlZCBhbHJlYWR5IHRvZGF5LmApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCkge1xyXG5cdFx0bGV0IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRpZiAoY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA8IDcpIHtcclxuXHRcdFx0Y3VycmVudFdlZWtseUNyZWF0ZWROb3RlcysrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXIpIHtcclxuXHRcdGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrIDw9IDYpIHtcclxuXHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDEpO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSk7XHJcblx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSlcclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgTm90ZXMgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB1cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyOiBIVE1MU3BhbkVsZW1lbnQpe1xyXG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHModGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpXHJcblx0XHRjb25zdCBwcm9ncmVzc2JhclBlcmNlbnQgPSAodGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMFxyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9YClcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyOiBudW1iZXIsIGJhckxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRsZXQgcHJvZ3Jlc3NiYXIgPSAnJ1xyXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gY2hhck51bVByb2dyZXNzYmFyOyBpKyspIHtcclxuXHRcdFx0aWYgKGkgPD0gYmFyTGVuZ3RoKSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJz0nXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cHJvZ3Jlc3NiYXIgKz0gJy0nXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9ncmVzc2JhcjtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZFNldHRpbmdzKCknKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0bGV0IHN0cmVha2Jvb3N0ZXIgPSB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXI7XHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3IgPSB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyKSArIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VTdHJlYWtib29zdGVyKGluY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArPSBpbmNyZWFzZVZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRjb25zb2xlLmxvZyhgc3RyZWFrYm9vc3RlcjogJHt0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJ9YClcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC09IGRlY3JlYXNlVmFsdWVcclxuXHRcdGlmIChuZXdWYWx1ZSA8IDApe1xyXG5cdFx0XHRuZXdWYWx1ZSA9IDBcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0fVxyXG5cclxuXHJcblxyXG5cclxuXHRhc3luYyB1cGRhdGVBdmF0YXJQYWdlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdC8vY29uc29sZS5sb2coYGN1cnJlbnQgc3RhdHVzUG9pbnRzOiAke3RoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzfWApXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2U0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5sZXZlbEFuZFBvaW50c1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXndlZWtseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMyA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMyA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5ib29zdGVyRmFjdG9yXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlNCA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlNCA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvLyByZWFkIGN1cnJlbnQgUG9pbnRzIGZyb20gc2V0dGluZ3NcclxuXHRcdGNvbnN0IG5ld1BvaW50cyA9IHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzXHJcblxyXG5cdFx0Y29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhuZXdQb2ludHMpO1xyXG5cdFx0bGV0IG5leHRMZXZlbEF0ID0gdGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbDtcclxuXHRcdGxldCByZWNlaXZlQmFkZ2UgPSBmYWxzZVxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPCBsZXZlbC5sZXZlbCl7XHJcblx0XHRcdC8vIExldmVsIFVwIGFyY2hpdmVkXHJcblx0XHRcdG5ldyBOb3RpY2UoYFdpdGggJHtuZXdQb2ludHN9IHBvaW50cywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgJHtsZXZlbC5sZXZlbH0uYClcclxuXHRcdFx0Ly8gY2hlY2sgZmlyc3QgaWYgdGhpcyBtZWFucyBhIG5ldyBiYWRnZSBiZWZvcmUgaXQgZ2V0cyBvdmVyd3JpdHRlblxyXG5cdFx0XHRyZWNlaXZlQmFkZ2UgPSBjaGVja0lmUmVjZWl2ZUFCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsLCBsZXZlbC5sZXZlbClcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IGxldmVsLmxldmVsO1xyXG5cdFx0XHRuZXh0TGV2ZWxBdCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NCYXJFbmQgPSBuZXh0TGV2ZWxBdCAtIG5ld1BvaW50cztcclxuXHRcdGNvbnN0IG5ld1BvaW50c1N0cmluZyA9ICd8ICoqTGV2ZWwqKiAgfCAqKicgKyBsZXZlbC5sZXZlbCArICcqKiB8XFxufCBQb2ludHMgfCAnICsgbmV3UG9pbnRzICsgJyAgICB8XFxuXmxldmVsQW5kUG9pbnRzXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtFeHByaXJpZW5jZV1cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxcbiAgICBkYXRhOiBbJyArIG5ld1BvaW50cyArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIHByb2dyZXNzQmFyRW5kICsgJ11cXG54TWluOiAnICsgbGV2ZWwucG9pbnRzICsgJ1xcbnhNYXg6ICcgKyBsZXZlbC5wb2ludHNOZXh0ICsgJ1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCdcclxuXHRcdGNvbnN0IGRhaWx5Q2hhbGxlbmdlID0gJ3wgKipkYWlseSBOb3RlcyoqIHwgKjUwMEVQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICcvNyoqICAgfFxcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbZGF5cyBkb25lIGluIGEgcm93XVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcXG4gICAgZGF0YTogWycgKyB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gKyAnXVxcbnhNaW46IDBcXG54TWF4OiA3XFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJztcclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSAnfCAqKmJvb3N0ZXIgZmFjdG9yKiogfCAqKicgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyAnKiogfCdcclxuXHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsICYmIHJlZmVyZW5jZTMgIT0gbnVsbCAmJiByZWZlcmVuY2U0ICE9IG51bGwpe1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSAtIDI7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI0O1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyIC0gMSAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQzID0gcmVmZXJlbmNlMyAtIDEgLTI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDMgPSByZWZlcmVuY2UzICsgMjQgLTI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0NCA9IHJlZmVyZW5jZTQgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCA1NSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kNCA9IHJlZmVyZW5jZTQgLSAyNSA7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCA1NSBpcyBuZWVkZWRcclxuXHRcdFx0XHJcblxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld1BvaW50c1N0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCBkYWlseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczMgPSBbLi4ubmV3TGluZXMyLnNsaWNlKDAsIHN0YXJ0MyksIHdlZWtseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMyLnNsaWNlKGVuZDMpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXM0ID0gWy4uLm5ld0xpbmVzMy5zbGljZSgwLCBzdGFydDQpLCBib29zdGVyRmFjdG9yLCAuLi5uZXdMaW5lczMuc2xpY2UoZW5kNCldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzNC5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZWNlaXZlQmFkZ2VcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBnaXZlQmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IGJhZGdlLmxldmVsICsgXCI6ICpcIiArIGJhZGdlLm5hbWUgKyBcIipcIil7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDE7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyICsgMjtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqIFwiICsgYmFkZ2UubGV2ZWwgKyBcIlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXVxyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMi5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlSW5pdEJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKipcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgcmVtb3ZlQmFkZ2VzV2hlbkluaXRMZXZlbEhpZ2hlcihhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBsZXZlbDogbnVtYmVyKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgb3V0c3RhbmRpbmdcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyID09IG51bGwpe1xyXG5cdFx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cclxuXHRcdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGxldmVsKSB7XHJcblx0XHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgcmVmZXJlbmNlICsgMSksIC4uLmxpbmVzLnNsaWNlKHJlZmVyZW5jZTIpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBjcmVhdGVDaGFydCh2YXVsdDogVmF1bHQpOiBQcm9taXNlPHN0cmluZz57XHJcblx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RmlsZSA9IGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlcylcclxuXHRcdC8vbGV0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lXHJcblx0XHQvL2lmIChlYXJsaWVzdEZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lICl7XHJcblx0XHRjb25zdCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5tdGltZVxyXG5cdFx0Ly99XHJcblxyXG5cdFx0bGV0IG1vbnRoQ291bnRlciA9IDAgLy9mb3JtYXQobmV3IERhdGUoZWFybGllc3REYXRlKSwgJ01NJyk7XHJcblx0XHRsZXQgZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHQvL2NvbnN0IGZpbGVEYXRlTW9udGhNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgZmlsZURhdGVNb250aE1hcE1vZCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBtb250aGNvdW50ID0gbW9udGhzQmV0d2VlbihuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCBuZXcgRGF0ZSgpKVxyXG5cdFx0bGV0IGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0bGV0IHlMYWJlbCA9IFwiXCJcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBjcmVhdGVkXHJcblx0XHQvKndoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH0qL1xyXG5cclxuXHRcdG1vbnRoQ291bnRlciA9IDBcclxuXHRcdGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgbW9kaWZpZWRcclxuXHRcdHdoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHR5TGFiZWwgPSB5TGFiZWwgKyBkYXRlU3RyaW5nICsgXCIsIFwiXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fVxyXG5cdFx0eUxhYmVsID0geUxhYmVsLnNsaWNlKDAseUxhYmVsLmxlbmd0aC0yKVxyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdC8qY29uc3QgY3JlYXRpb25EYXRlcyA9IGdldENyZWF0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNyZWF0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fSovXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgbW9kIGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdGNvbnN0IG1vZGlmaWNhdGlvbkRhdGVzID0gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgY3JlYXRlZFxyXG5cdFx0LypsZXQgY2hhclN0cmluZ0NyZWF0ZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcCkge1xyXG5cdFx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQuc2xpY2UoMCxjaGFyU3RyaW5nQ3JlYXRlZC5sZW5ndGgtMikqL1xyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBtb2RpZmllZFxyXG5cdFx0bGV0IGNoYXJTdHJpbmdNb2RpZmllZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwTW9kKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGtleTogJHtrZXl9LCB2YWx1ZTogJHt2YWx1ZX1gKTtcclxuXHRcdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZC5zbGljZSgwLGNoYXJTdHJpbmdNb2RpZmllZC5sZW5ndGgtMilcclxuXHJcblx0XHRyZXR1cm4gY3JlYXRlQ2hhcnRGb3JtYXQoeUxhYmVsLCBjaGFyU3RyaW5nTW9kaWZpZWQsIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbDogUHJvbWlzZTxib29sZWFuPil7XHJcblx0XHRuZXdMZXZlbC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pPT4ge1xyXG5cdFx0XHRpZihyZXN1bHQpe1xyXG5cdFx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGZhbHNlKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhgYmFkZ2UgZm9yIGxldmVsICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gaXMgJHtiYWRnZS5uYW1lfSAtICR7YmFkZ2UubGV2ZWx9YClcclxuXHRcdFx0XHR0aGlzLmdpdmVCYWRnZUluUHJvZmlsZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBiYWRnZSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0XHRcdHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVtb3ZlS2V5c0Zyb21Gcm9udG1hdHRlcigpIHtcclxuXHRcdC8vY29uc3QgeyBWYXVsdCwgVEZpbGUgfSA9IHdpbmRvdy5hcHA7XHJcblx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcFxyXG5cdFx0Ly9jb25zdCB2YXVsdCA9IFZhdWx0LnJlb3BlbigpO1xyXG5cclxuXHRcdC8vIEdldCBhbGwgTWFya2Rvd24gZmlsZXMgaW4gdGhlIHZhdWx0XHJcblx0XHQvL2NvbnN0IG1hcmtkb3duRmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXAgPSBhd2FpdCBnZXRGaWxlQ291bnRNYXAodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MudGFnc0V4Y2x1ZGUsIHRoaXMuc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSk7XHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcC5rZXlzKCkpIHtcclxuXHRcdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRGaWxlcygpO1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZXMuZmluZChmaWxlID0+IGZpbGUuYmFzZW5hbWUgPT09IGZpbGVOYW1lKTtcclxuXHRcdFx0aWYgKCFmaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGBGaWxlICR7ZmlsZU5hbWV9IG5vdCBmb3VuZC5gKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL2NvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWV9YCk7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIG5ldyBOb3RpY2UoYFJlbW92ZWQgc3BlY2lmaWVkIGtleXMgZnJvbSBmcm9udG1hdHRlciBmcm9tIGZpbGUgXFxcIiR7ZmlsZU5hbWV9XFxcIi5gKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHdoaWNoTGV2ZWxOZXh0QmFkZ2UoY3VycmVudExldmVsOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj57XHJcblx0XHRsZXQgbmV4dEJhZGdlTGV2ZWwgPSAwXHJcblx0XHRmb3IgKGxldCBpID0gY3VycmVudExldmVsOyBpIDwgMTEwOyBpKyspe1xyXG5cdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChpLCB0cnVlKVxyXG5cdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdGNvbnN0IG1hdGNoID0gYmFkZ2UubGV2ZWwubWF0Y2gobGV2ZWxSZWdleCk7XHJcblx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBjdXJyZW50TGV2ZWwgJiYgbmV4dEJhZGdlTGV2ZWwgPT0gMCApIHtcclxuXHRcdFx0XHRcdG5leHRCYWRnZUxldmVsID0gbGV2ZWxOdW1iZXI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV4dEJhZGdlTGV2ZWxcclxuXHR9XHJcblxyXG5cdGFzeW5jIGJvb3N0ZXJGb3JJbml0KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcblx0XHRjb25zdCBuZXh0QmFkZ2VBdCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0Y29uc3Qgc3RhdHVzUG9pbnRzVG9SZWFjaCA9IHN0YXR1c1BvaW50c0ZvckxldmVsKG5leHRCYWRnZUF0KVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgc3RhdHVzUG9pbnRzVG9SZWFjaCBmb3IgbmV4dCBCYWRnZTogJHtzdGF0dXNQb2ludHNUb1JlYWNofWApXHJcblx0XHQvLyA1MCBOb3RlcyBmcm9tIExldmVsIDEgdG8gNSB0byBnZXQgdGhlIGZpcnN0IGJhZGdlLlxyXG5cdFx0Ly8gMzAwIFBvaW50cyBpbiBhdmVyYWdlIGZvciBhIE5vdGUuXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gTWF0aC5yb3VuZCgoc3RhdHVzUG9pbnRzVG9SZWFjaCAtIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKS81MC8zMDApO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSBib29zdGVyRmFjdG9yXHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gdHJ1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgYm9vc3RlckZha3RvcjogJHtib29zdGVyRmFjdG9yfWApXHJcblx0XHRyZXR1cm4gYm9vc3RlckZhY3RvclxyXG5cdH1cclxuXHJcblx0YXN5bmMgb3BlbkF2YXRhckZpbGUoKSB7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlKXtcclxuXHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk/LnBhdGggfHwgJyc7XHJcblx0XHRcdGF3YWl0IGFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGV4aXN0aW5nRmlsZS5wYXRoLCBzb3VyY2VQYXRoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwiRmlsZSBub3QgZm91bmQgb3IgdW5hYmxlIHRvIG9wZW4uXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpc1NhbWVEYXkoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBjdXJyZW50RGF0ZSA9IHdpbmRvdy5tb21lbnQoKTsgLy8gR2V0IHRoZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gY3VycmVudERhdGUuaXNTYW1lKGlucHV0RGF0ZSwgJ2RheScpOyAvLyBDaGVjayBpZiB0aGV5IGFyZSB0aGUgc2FtZSBkYXlcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPbmVEYXlCZWZvcmUoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBvbmVEYXlCZWZvcmVDdXJyZW50ID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKTsgLy8gQ2FsY3VsYXRlIG9uZSBkYXkgYmVmb3JlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBpbnB1dERhdGUuaXNTYW1lKG9uZURheUJlZm9yZUN1cnJlbnQsICdkYXknKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXZhdGFyRmlsZShhcHA6IEFwcCwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG5cdC8vc2V0dGluZ3M6IEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzO1xyXG5cdC8vIERlZmluZSB0aGUgZmlsZSBuYW1lIGFuZCBjb250ZW50XHJcblx0Ly9jb25zdCBmaWxlTmFtZSA9ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nOyAvLyB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lO1xyXG5cdC8vY29uc29sZS5sb2coYGZpbGVOYW1lOiAke2ZpbGVOYW1lfWApXHJcblxyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7ZmlsZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2ZpbGVOYW1lfS5tZCBhbHJlYWR5IGV4aXN0c2ApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHQvLyBDcmVhdGUgdGhlIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHZhdWx0XHJcblx0YXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShgJHtmaWxlTmFtZX0ubWRgLCBhdmF0YXJJbml0Q29udGVudCk7XHJcblxyXG59XHJcblxyXG5cclxuY2xhc3MgTW9kYWxJbmZvcm1hdGlvbmJveCBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmc7IC8vIFN0b3JlIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZGlzcGxheVRleHQ6IHN0cmluZykge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dDsgLy8gU3RvcmUgdGhlIHBhc3NlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5zZXRUZXh0KHRoaXMuZGlzcGxheVRleHQpOyAvLyBVc2UgdGhlIHN0b3JlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlRm9ybWF0U3RyaW5ncyhsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpIHtcclxuXHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHJcblx0aWYgKCFhY3RpdmVWaWV3KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gYWN0aXZlIE1hcmtkb3duIHZpZXcgZm91bmQuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgZWRpdG9yID0gYWN0aXZlVmlldy5lZGl0b3I7XHJcblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cclxuXHRpZiAoIXNlbGVjdGVkVGV4dCkge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIHRleHQgc2VsZWN0ZWQgKGZvciBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIHN3aXRjaCBMYXllciAyICYgMykuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0bGV0IHJlcGxhY2VkVGV4dCA9IHNlbGVjdGVkVGV4dC5yZXBsYWNlQWxsKGxheWVyMiwgXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIik7XHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIzLCBcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIsIGxheWVyMilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiLCBsYXllcjMpXHJcblxyXG5cdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHJlcGxhY2VkVGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IG51bWJlciB7XHJcblx0bGV0IHJhdGluZ0Zha3RvcjogbnVtYmVyXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSByYXRpbmdOZXcgLSBwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMClcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gMFxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ0Zha3RvclxyXG59XHJcblxyXG5cclxuXHJcbiAgXHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4iLCAiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IGdhbWlmaWNhdGlvbiBmcm9tICcuL21haW4nO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBQYXJ0aWFsPElTZXR0aW5ncz4gPSB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiB0cnVlLFxuICBiaW5kRW50ZXI6IHRydWUsXG4gIGJpbmRUYWI6IHRydWUsXG4gIGF2YXRhclBhZ2VOYW1lOiAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJyxcbiAgdGFnc0V4Y2x1ZGU6ICcnLFxuICBmb2xkZXJFeGNsdWRlOiAnRXhjYWxpZHJhdycsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiAnPT0nLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogJyoqJyxcbiAgbnVtQWxsRmlsZXM6IDEsXG4gIG51bUFsbEZpbGVzQ291bnQ6IDAsXG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IDAsXG4gIHN0YXR1c1BvaW50czogMCxcbiAgc3RhdHVzTGV2ZWw6IDEsXG4gIHhwRm9yTmV4dExldmVsOiAxMDAwLFxuICBnYW1pZmljYXRpb25TdGFydERhdGU6ICcxMi4wOC4yMDIzJyxcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGZhbHNlLFxuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IDEsXG4gIGRlYnVnOiBmYWxzZSxcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICBzdHJlYWtib29zdGVyOiAwLFxuICBzdHJlYWtib29zdGVyRGF0ZTogJzEyLjA4LjIwMjMnLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2V0dGluZ3Mge1xuICBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgYmluZEVudGVyOiBib29sZWFuO1xuICBiaW5kVGFiOiBib29sZWFuO1xuICBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgc3RyZWFrYm9vc3RlckRhdGU6IHN0cmluZztcbn1cblxuXG5leHBvcnQgY2xhc3MgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcblx0cHJpdmF0ZSByZWFkb25seSBwbHVnaW46IGdhbWlmaWNhdGlvbjtcbiAgXG4gIHB1YmxpYyBlbmFibGVJbml0Q29tbWFuZDogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgcHVibGljIGJpbmRUYWI6IGJvb2xlYW47XG4gIHB1YmxpYyBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBwdWJsaWMgbnVtQWxsRmlsZXM6IG51bWJlcjtcbiAgcHVibGljIG51bUFsbEZpbGVzQ291bnQ6IG51bWJlcjtcbiAgcHVibGljIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c1BvaW50czogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzTGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIHB1YmxpYyBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcbiAgcHVibGljIGJhZGdlQm9vc3RlclN0YXRlOiBib29sZWFuO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIHB1YmxpYyBkZWJ1ZzogYm9vbGVhbjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHB1YmxpYyBzdHJlYWtib29zdGVyRGF0ZTogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUFBLEVBQ2YsbUJB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QUFBLEVBQy9DLEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdEQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQ3pEO0FBRU8sU0FBUyxrQkFBa0IsUUFBMkI7QUFDM0QsTUFBSSxRQUFtQixVQUFVLENBQUM7QUFDbEMsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxVQUFVLEtBQUssUUFBUTtBQUN6QixjQUFRO0FBQUEsSUFDVixPQUFPO0FBQ0w7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVPLFNBQVMscUJBQXFCLGFBQTZCO0FBQ2hFLE1BQUksZUFBZTtBQUNuQixhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLGVBQWUsS0FBSyxTQUFTLGdCQUFnQixHQUFHO0FBQ2xELHFCQUFlLEtBQUs7QUFBQSxJQUN0QjtBQUFBLEVBQ0Y7QUFHRixTQUFPO0FBQ1A7OztBQzlJRixJQUFNLDBCQUFvQztBQUFBLEVBQ3pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxrQkFBNEI7QUFBQSxFQUNqQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFD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QUFDdEIsY0FBVSxRQUFRLEtBQUssV0FBVztBQUFBLEVBQ25DO0FBQUEsRUFFQSxVQUFVO0FBQ1QsVUFBTSxFQUFFLFVBQVUsSUFBSTtBQUN0QixjQUFVLE1BQU07QUFBQSxFQUNqQjtBQUNEO0FBR0EsZUFBZSxxQkFBcUIsUUFBZ0IsUUFBZ0I7QUFDbkUsUUFBTSxhQUFhLEtBQUssSUFBSSxVQUFVLG9CQUFvQiw2QkFBWTtBQUV0RSxNQUFJLENBQUMsWUFBWTtBQUNoQixZQUFRLE1BQU0sZ0NBQWdDO0FBQzlDO0FBQUEsRUFDRDtBQUVBLFFBQU0sU0FBUyxXQUFXO0FBQzFCLFFBQU0sZUFBZSxPQUFPLGFBQWE7QUFFekMsTUFBSSxDQUFDLGNBQWM7QUFDbEIsWUFBUSxNQUFNLHNFQUFzRTtBQUNwRjtBQUFBLEVBQ0Q7QUFFQSxNQUFJLGVBQWUsYUFBYSxXQUFXLFFBQVEsa0JBQU07QUFDekQsaUJBQWUsYUFBYSxXQUFXLFFBQVEsMEJBQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLDRCQUFRLE1BQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLG9CQUFRLE1BQU07QUFFckQsU0FBTyxpQkFBaUIsWUFBWTtBQUNyQztBQUVBLFNBQVMsNkJBQTZCLGVBQXVCLFdBQTJCO0FBQ3ZGLE1BQUk7QUFDSixNQUFJLFNBQVMsZUFBZSxFQUFFLElBQUksV0FBVTtBQUMzQyxtQkFBZSxZQUFZLFNBQVMsZUFBZSxFQUFFO0FBQUEsRUFDdEQsT0FBTztBQUNOLG1CQUFlO0FBQUEsRUFDaEI7QUFFQSxTQUFPO0FBQ1I7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAib2JqIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgIk1JTExJU0VDT05EU19JTl9XRUVLIiwgImZvcm1hdHRlcnMiLCAibG9jYWxpemUiLCAieSIsICJNIiwgImQiLCAiYSIsICJoIiwgIkgiLCAibSIsICJzIiwgIlMiLCAiZGF0ZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0TG9uZyIsICJ0aW1lTG9uZ0Zvcm1hdHRlciIsICJkYXRlVGltZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0IiwgImZvcm1hdERpc3RhbmNlIiwgImZvcm1hdCIsICJmb3JtYXRSZWxhdGl2ZSIsICJvcmRpbmFsTnVtYmVyIiwgInZhbHVlQ2FsbGJhY2siLCAiZGVmYXVsdE9wdGlvbnMiLCAibG9jYWxlIiwgIm1hdGNoIiwgInBhdGgiLCAiYXBwIiwgImZpbGVOYW1lIiwgImN1cnJlbnRDb3VudCIsICJpIiwgImkiLCAiZSIsICJpIiwgIm1hdGNoIiwgImZpbGUiLCAiYXBwIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJyk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpXHJcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlICogKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyKSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZWFjaGVkISAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBjcmVhdGVkLmApXHJcblx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHQvLyBkbyBub3RoaW5nXHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBub3RlIGNyZWF0aW9uIHdhcyByYXRlZCBhbHJlYWR5IHRvZGF5LmApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCkge1xyXG5cdFx0bGV0IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRpZiAoY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA8IDcpIHtcclxuXHRcdFx0Y3VycmVudFdlZWtseUNyZWF0ZWROb3RlcysrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXIpIHtcclxuXHRcdGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrIDw9IDYpIHtcclxuXHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDEpO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSAqICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcikpO1xyXG5cdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgdXBkYXRlU3RhdHVzQmFyKHN0YXR1c2JhcjogSFRNTFNwYW5FbGVtZW50KXtcclxuXHRcdGNvbnN0IGN1cnJlbnRMZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKVxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NiYXJQZXJjZW50ID0gKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzIC0gY3VycmVudExldmVsLnBvaW50cykvKGN1cnJlbnRMZXZlbC5wb2ludHNOZXh0IC0gY3VycmVudExldmVsLnBvaW50cykqMTAwO1xyXG5cdFx0Y29uc3QgY2hhck51bVByb2dyZXNzYmFyID0gMTBcclxuXHRcdGNvbnN0IGJhckxlbmd0aCA9IE1hdGgucm91bmQocHJvZ3Jlc3NiYXJQZXJjZW50IC8gY2hhck51bVByb2dyZXNzYmFyKVxyXG5cdFx0c3RhdHVzYmFyLnNldFRleHQoYFx1RDgzQ1x1REZCMnxsdmw6ICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gfCAke3RoaXMuY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyLCBiYXJMZW5ndGgpfWApXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZVByb2dyZXNzYmFyKGNoYXJOdW1Qcm9ncmVzc2JhcjogbnVtYmVyLCBiYXJMZW5ndGg6IG51bWJlcikge1xyXG5cdFx0bGV0IHByb2dyZXNzYmFyID0gJydcclxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDw9IGNoYXJOdW1Qcm9ncmVzc2JhcjsgaSsrKSB7XHJcblx0XHRcdGlmIChpIDw9IGJhckxlbmd0aCkge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICc9J1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICctJ1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJvZ3Jlc3NiYXI7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdFx0Y29uc29sZS5sb2coJ2xvYWRTZXR0aW5ncygpJylcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNUb0FkZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGxldCBib29zdGVyRmFjdG9yID0gMTtcclxuXHRcdGxldCBzdHJlYWtib29zdGVyID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyO1xyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSBwb2ludHNUb0FkZCAqIChib29zdGVyRmFjdG9yICsgc3RyZWFrYm9vc3RlcikgKyB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlU3RyZWFrYm9vc3RlcihpbmNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKz0gaW5jcmVhc2VWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Y29uc29sZS5sb2coYHN0cmVha2Jvb3N0ZXI6ICR7dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyfWApXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZGVjcmVhc2VTdHJlYWtib29zdGVyKGRlY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdGxldCBuZXdWYWx1ZSA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtPSBkZWNyZWFzZVZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKicgKyB0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayArICcvMioqICAgfCc7XHJcblx0XHRjb25zdCBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gOiBudW1iZXIgPSA3IC0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0Y29uc3Qgd2Vla2x5Q2hhbGxlbmdlID0gJ3wgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKicgKyB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgKyAnLzcqKiAgIHxcXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW2RheXMgZG9uZSBpbiBhIHJvd11cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XFxuICAgIGRhdGE6IFsnICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgZGF5c0xlZnRJbldlZWtseUNoYWluICsgJ11cXG54TWluOiAwXFxueE1heDogN1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCc7XHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gJ3wgKipib29zdGVyIGZhY3RvcioqIHwgKionICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyICsgJyoqIHwnXHJcblxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCAmJiByZWZlcmVuY2UzICE9IG51bGwgJiYgcmVmZXJlbmNlNCAhPSBudWxsKXtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAyO1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyNDtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQzID0gcmVmZXJlbmNlMyArIDI0IC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDQgPSByZWZlcmVuY2U0IC0gMSAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgNTUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDQgPSByZWZlcmVuY2U0IC0gMjUgOyAvLyBubyBpZGVhIHdieSBvZmZzZXQgNTUgaXMgbmVlZGVkXHJcblx0XHRcdFxyXG5cclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdQb2ludHNTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgZGFpbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMzID0gWy4uLm5ld0xpbmVzMi5zbGljZSgwLCBzdGFydDMpLCB3ZWVrbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzMi5zbGljZShlbmQzKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzNCA9IFsuLi5uZXdMaW5lczMuc2xpY2UoMCwgc3RhcnQ0KSwgYm9vc3RlckZhY3RvciwgLi4ubmV3TGluZXMzLnNsaWNlKGVuZDQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczQuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVjZWl2ZUJhZGdlXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZ2l2ZUJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBiYWRnZS5sZXZlbCArIFwiOiAqXCIgKyBiYWRnZS5uYW1lICsgXCIqXCIpe1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAxO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiArIDI7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKiBcIiArIGJhZGdlLmxldmVsICsgXCJcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV1cclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczIuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZUluaXRCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCApe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHJlbW92ZUJhZGdlc1doZW5Jbml0TGV2ZWxIaWdoZXIoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgbGV2ZWw6IG51bWJlcil7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIG91dHN0YW5kaW5nXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiA9PSBudWxsKXtcclxuXHRcdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHJcblx0XHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBsZXZlbCkge1xyXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHJlZmVyZW5jZSArIDEpLCAuLi5saW5lcy5zbGljZShyZWZlcmVuY2UyKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgY3JlYXRlQ2hhcnQodmF1bHQ6IFZhdWx0KTogUHJvbWlzZTxzdHJpbmc+e1xyXG5cdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBlYXJsaWVzdEZpbGUgPSBmaW5kRWFybGllc3RNb2RpZmllZEZpbGUoZmlsZXMpXHJcblx0XHQvL2xldCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZVxyXG5cdFx0Ly9pZiAoZWFybGllc3RGaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZSApe1xyXG5cdFx0Y29uc3QgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQubXRpbWVcclxuXHRcdC8vfVxyXG5cclxuXHRcdGxldCBtb250aENvdW50ZXIgPSAwIC8vZm9ybWF0KG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksICdNTScpO1xyXG5cdFx0bGV0IGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0Ly9jb25zdCBmaWxlRGF0ZU1vbnRoTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IGZpbGVEYXRlTW9udGhNYXBNb2QgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgbW9udGhjb3VudCA9IG1vbnRoc0JldHdlZW4obmV3IERhdGUoZWFybGllc3REYXRlKSwgbmV3IERhdGUoKSlcclxuXHRcdGxldCBkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdGxldCB5TGFiZWwgPSBcIlwiXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgY3JlYXRlZFxyXG5cdFx0Lyp3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9Ki9cclxuXHJcblx0XHRtb250aENvdW50ZXIgPSAwXHJcblx0XHRkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIG1vZGlmaWVkXHJcblx0XHR3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0eUxhYmVsID0geUxhYmVsICsgZGF0ZVN0cmluZyArIFwiLCBcIlxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH1cclxuXHRcdHlMYWJlbCA9IHlMYWJlbC5zbGljZSgwLHlMYWJlbC5sZW5ndGgtMilcclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHQvKmNvbnN0IGNyZWF0aW9uRGF0ZXMgPSBnZXRDcmVhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjcmVhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH0qL1xyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IG1vZCBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHRjb25zdCBtb2RpZmljYXRpb25EYXRlcyA9IGdldE1vZGlmaWNhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtb2RpZmljYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIGNyZWF0ZWRcclxuXHRcdC8qbGV0IGNoYXJTdHJpbmdDcmVhdGVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXApIHtcclxuXHRcdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkLnNsaWNlKDAsY2hhclN0cmluZ0NyZWF0ZWQubGVuZ3RoLTIpKi9cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgbW9kaWZpZWRcclxuXHRcdGxldCBjaGFyU3RyaW5nTW9kaWZpZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcE1vZCkge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBrZXk6ICR7a2V5fSwgdmFsdWU6ICR7dmFsdWV9YCk7XHJcblx0XHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQuc2xpY2UoMCxjaGFyU3RyaW5nTW9kaWZpZWQubGVuZ3RoLTIpXHJcblxyXG5cdFx0cmV0dXJuIGNyZWF0ZUNoYXJ0Rm9ybWF0KHlMYWJlbCwgY2hhclN0cmluZ01vZGlmaWVkLCB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBkZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWw6IFByb21pc2U8Ym9vbGVhbj4pe1xyXG5cdFx0bmV3TGV2ZWwudGhlbigocmVzdWx0OiBib29sZWFuKT0+IHtcclxuXHRcdFx0aWYocmVzdWx0KXtcclxuXHRcdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbCh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsLCBmYWxzZSlcclxuXHRcdFx0XHRuZXcgTm90aWNlKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coYGJhZGdlIGZvciBsZXZlbCAke3RoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWx9IGlzICR7YmFkZ2UubmFtZX0gLSAke2JhZGdlLmxldmVsfWApXHJcblx0XHRcdFx0dGhpcy5naXZlQmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgYmFkZ2UpXHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gMTtcclxuXHRcdFx0XHR0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlbW92ZUtleXNGcm9tRnJvbnRtYXR0ZXIoKSB7XHJcblx0XHQvL2NvbnN0IHsgVmF1bHQsIFRGaWxlIH0gPSB3aW5kb3cuYXBwO1xyXG5cdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHBcclxuXHRcdC8vY29uc3QgdmF1bHQgPSBWYXVsdC5yZW9wZW4oKTtcclxuXHJcblx0XHQvLyBHZXQgYWxsIE1hcmtkb3duIGZpbGVzIGluIHRoZSB2YXVsdFxyXG5cdFx0Ly9jb25zdCBtYXJrZG93bkZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZmlsZUNvdW50TWFwID0gYXdhaXQgZ2V0RmlsZUNvdW50TWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Zm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlQ291bnRNYXAua2V5cygpKSB7XHJcblx0XHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0RmlsZXMoKTtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IGZpbGVzLmZpbmQoZmlsZSA9PiBmaWxlLmJhc2VuYW1lID09PSBmaWxlTmFtZSk7XHJcblx0XHRcdGlmICghZmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGVOYW1lfSBub3QgZm91bmQuYCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9jb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBuZXcgTm90aWNlKGBSZW1vdmVkIHNwZWNpZmllZCBrZXlzIGZyb20gZnJvbnRtYXR0ZXIgZnJvbSBmaWxlIFxcXCIke2ZpbGVOYW1lfVxcXCIuYCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB3aGljaExldmVsTmV4dEJhZGdlKGN1cnJlbnRMZXZlbDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+e1xyXG5cdFx0bGV0IG5leHRCYWRnZUxldmVsID0gMFxyXG5cdFx0Zm9yIChsZXQgaSA9IGN1cnJlbnRMZXZlbDsgaSA8IDExMDsgaSsrKXtcclxuXHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoaSwgdHJ1ZSlcclxuXHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRjb25zdCBtYXRjaCA9IGJhZGdlLmxldmVsLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gY3VycmVudExldmVsICYmIG5leHRCYWRnZUxldmVsID09IDAgKSB7XHJcblx0XHRcdFx0XHRuZXh0QmFkZ2VMZXZlbCA9IGxldmVsTnVtYmVyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5leHRCYWRnZUxldmVsXHJcblx0fVxyXG5cclxuXHRhc3luYyBib29zdGVyRm9ySW5pdCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cdFx0Y29uc3QgbmV4dEJhZGdlQXQgPSBhd2FpdCB0aGlzLndoaWNoTGV2ZWxOZXh0QmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbClcclxuXHRcdGNvbnN0IHN0YXR1c1BvaW50c1RvUmVhY2ggPSBzdGF0dXNQb2ludHNGb3JMZXZlbChuZXh0QmFkZ2VBdClcclxuXHRcdC8vY29uc29sZS5sb2coYHN0YXR1c1BvaW50c1RvUmVhY2ggZm9yIG5leHQgQmFkZ2U6ICR7c3RhdHVzUG9pbnRzVG9SZWFjaH1gKVxyXG5cdFx0Ly8gNTAgTm90ZXMgZnJvbSBMZXZlbCAxIHRvIDUgdG8gZ2V0IHRoZSBmaXJzdCBiYWRnZS5cclxuXHRcdC8vIDMwMCBQb2ludHMgaW4gYXZlcmFnZSBmb3IgYSBOb3RlLlxyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9IE1hdGgucm91bmQoKHN0YXR1c1BvaW50c1RvUmVhY2ggLSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cykvNTAvMzAwKTtcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gYm9vc3RlckZhY3RvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IHRydWVcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdC8vY29uc29sZS5sb2coYGJvb3N0ZXJGYWt0b3I6ICR7Ym9vc3RlckZhY3Rvcn1gKVxyXG5cdFx0cmV0dXJuIGJvb3N0ZXJGYWN0b3JcclxuXHR9XHJcblxyXG5cdGFzeW5jIG9wZW5BdmF0YXJGaWxlKCkge1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHt0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSl7XHJcblx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpPy5wYXRoIHx8ICcnO1xyXG5cdFx0XHRhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChleGlzdGluZ0ZpbGUucGF0aCwgc291cmNlUGF0aCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIkZpbGUgbm90IGZvdW5kIG9yIHVuYWJsZSB0byBvcGVuLlwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaXNTYW1lRGF5KGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3QgY3VycmVudERhdGUgPSB3aW5kb3cubW9tZW50KCk7IC8vIEdldCB0aGUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGN1cnJlbnREYXRlLmlzU2FtZShpbnB1dERhdGUsICdkYXknKTsgLy8gQ2hlY2sgaWYgdGhleSBhcmUgdGhlIHNhbWUgZGF5XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzT25lRGF5QmVmb3JlKGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3Qgb25lRGF5QmVmb3JlQ3VycmVudCA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5Jyk7IC8vIENhbGN1bGF0ZSBvbmUgZGF5IGJlZm9yZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gaW5wdXREYXRlLmlzU2FtZShvbmVEYXlCZWZvcmVDdXJyZW50LCAnZGF5Jyk7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUF2YXRhckZpbGUoYXBwOiBBcHAsIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHQvL3NldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHQvLyBEZWZpbmUgdGhlIGZpbGUgbmFtZSBhbmQgY29udGVudFxyXG5cdC8vY29uc3QgZmlsZU5hbWUgPSAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJzsgLy8gdGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZTtcclxuXHQvL2NvbnNvbGUubG9nKGBmaWxlTmFtZTogJHtmaWxlTmFtZX1gKVxyXG5cclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2ZpbGVOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHtmaWxlTmFtZX0ubWQgYWxyZWFkeSBleGlzdHNgKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblx0Ly8gQ3JlYXRlIHRoZSBmaWxlIGluIHRoZSByb290IG9mIHRoZSB2YXVsdFxyXG5cdGF3YWl0IGFwcC52YXVsdC5jcmVhdGUoYCR7ZmlsZU5hbWV9Lm1kYCwgYXZhdGFySW5pdENvbnRlbnQpO1xyXG5cclxufVxyXG5cclxuXHJcbmNsYXNzIE1vZGFsSW5mb3JtYXRpb25ib3ggZXh0ZW5kcyBNb2RhbCB7XHJcblx0cHJpdmF0ZSByZWFkb25seSBkaXNwbGF5VGV4dDogc3RyaW5nOyAvLyBTdG9yZSB0aGUgdGV4dCB0byBiZSBkaXNwbGF5ZWRcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIGRpc3BsYXlUZXh0OiBzdHJpbmcpIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0XHR0aGlzLmRpc3BsYXlUZXh0ID0gZGlzcGxheVRleHQ7IC8vIFN0b3JlIHRoZSBwYXNzZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25PcGVuKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuc2V0VGV4dCh0aGlzLmRpc3BsYXlUZXh0KTsgLy8gVXNlIHRoZSBzdG9yZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25DbG9zZSgpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUZvcm1hdFN0cmluZ3MobGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKSB7XHJcblx0Y29uc3QgYWN0aXZlVmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XHJcblxyXG5cdGlmICghYWN0aXZlVmlldykge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIGFjdGl2ZSBNYXJrZG93biB2aWV3IGZvdW5kLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGNvbnN0IGVkaXRvciA9IGFjdGl2ZVZpZXcuZWRpdG9yO1xyXG5cdGNvbnN0IHNlbGVjdGVkVGV4dCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHJcblx0aWYgKCFzZWxlY3RlZFRleHQpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyB0ZXh0IHNlbGVjdGVkIChmb3IgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzd2l0Y2ggTGF5ZXIgMiAmIDMpLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGxldCByZXBsYWNlZFRleHQgPSBzZWxlY3RlZFRleHQucmVwbGFjZUFsbChsYXllcjIsIFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIpO1xyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKGxheWVyMywgXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiLCBsYXllcjIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIiwgbGF5ZXIzKVxyXG5cclxuXHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihyZXBsYWNlZFRleHQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGxldCByYXRpbmdGYWt0b3I6IG51bWJlclxyXG5cdGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gcmF0aW5nTmV3IC0gcGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZ0Zha3RvciA9IDBcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdGYWt0b3JcclxufVxyXG5cclxuXHJcblxyXG4gIFxyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuIiwgImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCBnYW1pZmljYXRpb24gZnJvbSAnLi9tYWluJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogUGFydGlhbDxJU2V0dGluZ3M+ID0ge1xuICBlbmFibGVJbml0Q29tbWFuZDogdHJ1ZSxcbiAgYmluZEVudGVyOiB0cnVlLFxuICBiaW5kVGFiOiB0cnVlLFxuICBhdmF0YXJQYWdlTmFtZTogJ0F2YXRhciAtIEdhbWlmaWNhdGlvbicsXG4gIHRhZ3NFeGNsdWRlOiAnJyxcbiAgZm9sZGVyRXhjbHVkZTogJ0V4Y2FsaWRyYXcnLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogJz09JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6ICcqKicsXG4gIG51bUFsbEZpbGVzOiAxLFxuICBudW1BbGxGaWxlc0NvdW50OiAwLFxuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiAwLFxuICBzdGF0dXNQb2ludHM6IDAsXG4gIHN0YXR1c0xldmVsOiAxLFxuICB4cEZvck5leHRMZXZlbDogMTAwMCxcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiAnMTIuMDguMjAyMycsXG4gIGJhZGdlQm9vc3RlclN0YXRlOiBmYWxzZSxcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiAxLFxuICBkZWJ1ZzogZmFsc2UsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgc3RyZWFrYm9vc3RlcjogMCxcbiAgc3RyZWFrYm9vc3RlckRhdGU6ICcxMi4wOC4yMDIzJyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBzdHJpbmc7XG59XG5cblxuZXhwb3J0IGNsYXNzIEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBnYW1pZmljYXRpb247XG4gIFxuICBwdWJsaWMgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kVGFiOiBib29sZWFuO1xuICBwdWJsaWMgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgcHVibGljIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIHB1YmxpYyBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIHB1YmxpYyBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHB1YmxpYyB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgcHVibGljIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBwdWJsaWMgZGVidWc6IGJvb2xlYW47XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlckRhdGU6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBnYW1pZmljYXRpb24pIHtcblx0ICBzdXBlcihhcHAsIHBsdWdpbik7XG5cdCAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cbiAgXG5cdHB1YmxpYyBkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Y29udGFpbmVyRWwuYWRkQ2xhc3MoXCJleGNhbGlkcmF3LXNldHRpbmdzXCIpO1xuXHRcdHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcblxuXHRcdGNvbnN0IGNvZmZlZURpdiA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdihcImNvZmZlZVwiKTtcblx0XHRjb2ZmZWVEaXYuYWRkQ2xhc3MoXCJleC1jb2ZmZWUtZGl2XCIpO1xuXHRcdGNvbnN0IGNvZmZlZUxpbmsgPSBjb2ZmZWVEaXYuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRocmVmOiBcImh0dHBzOi8va28tZmkuY29tL2FuZHJlYXN0cmViaW5nXCIsXG5cdFx0fSk7XG5cdFx0Y29uc3QgY29mZmVlSW1nID0gY29mZmVlTGluay5jcmVhdGVFbChcImltZ1wiLCB7XG5cdFx0YXR0cjoge1xuXHRcdFx0c3JjOiBcImh0dHBzOi8vY2RuLmtvLWZpLmNvbS9jZG4va29maTMucG5nP3Y9M1wiLFxuXHRcdH0sXG5cdFx0fSk7XG5cdFx0Y29mZmVlSW1nLmhlaWdodCA9IDQ1O1xuXG5cdFx0Ly9jb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXHRcdC8vY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgXG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnR2FtaWZ5IHlvdXIgUEtNIC0gU2V0dGluZ3MnIH0pO1xuXHRcdGNvbnNvbGUubG9nKCdzZXR0aW5ncyBjYWxsZWQnKVxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJyN0YWdzIHRvIGlnbm9yZScpXG5cdFx0XHQuc2V0RGVzYygnZW50ZXIgdGFncyB3aXRob3V0ICMgYW5kIHNlcGFyYXRlIHdpdGggXCIsIFwiLlxcbkluY2x1ZGUgbmVzdGVkIHRhZ3MuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgdGFnMSwgdGFnMi9zdWJ0YWcsIFx1MjAyNicpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdFx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdmb2xkZXIgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciBmb2xkZXIgd2hpY2hzIGNvbnRlbnQgc2hhbGwgYmUgaWdub3JlZC4gU2VwYXJhdGUgd2l0aCBcIiwgXCIuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgZm9sZGVyMSwgZm9sZGVyMiwgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9maWxlIFBhZ2UgTmFtZScpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2UgaGVyZSB0aGUgbmFtZSBvZiB5b3VyIHByb2ZpbGUgcGFnZSBpZiB5b3UgbGlrZS4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCduYW1lJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cdFx0XHRcdFxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ090aGVyIFNldHRpbmdzJyB9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdEaXNhYmxlIEluaXQgQ29tbWFuZCcpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiByZW1vdmUgdGhlIGluaXQgY29tbWFuZCBmcm9tIGNvbW1hbmQgcHJvbXB0IGJ5IHN3aXRjaGluZyBvZmYuXFxucmVzdGFydCBuZWVkZWQuJylcblx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4gXG5cdFx0XHRcdHRvZ2dsZVxuICAgICAgICAgIFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpXG4gICAgICAgIFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kID0gdmFsdWU7XG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgXHRcdFx0fSksXG5cdFx0XHQpO1xuXG5cdFx0XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnbGltaXQgdGhlIHZpc2libGUgbW9udGggaW4gdGhlIGNoYXJ0IG9uIHlvdXIgYXZhdGFyIHBhZ2U6ICcgKyB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdC5zZXREZXNjKCdpZiAwLCBhbGwgbW9udGggd2lsbCBiZSBzaG93bi4gRW50ZXIgYSBudW1iZXIgaG93IG1hbnkgbW9udGggc2hhbGwgYmUgc2hvd24uJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTnVtYmVyIG9mIE1vbnRoIHRvIHNob3cnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlLnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cbiAgXG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9ncmVzc2l2ZSBTdW1tYXJpemF0aW9uJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSB3aGljaCBmb3JtYXR0aW5nIHlvdSB1c2UgZm9yIExheWVyIDIgYW5kIDMuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMiBpcyB1c3VhbGx5ICoqJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSlcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMyBpcyB1c3VhbGx5ID09Jylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0fSkpO1xuXG5cdH1cbiAgfSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1aXJlZEFyZ3MocmVxdWlyZWQsIGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgcmVxdWlyZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHJlcXVpcmVkICsgJyBhcmd1bWVudCcgKyAocmVxdWlyZWQgPiAxID8gJ3MnIDogJycpICsgJyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3MubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgZGF0ZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZShOYU4pKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBzb21lIHZhbHVlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKCcyMDE0LTAyLTMxJylcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIG9iamVjdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSh7fSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTtcblxuICAvLyBDbG9uZSB0aGUgZGF0ZVxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YoYXJndW1lbnQpID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjc3RyaW5nLWFyZ3VtZW50c1wiKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufSIsICJpbXBvcnQgaXNEYXRlIGZyb20gXCIuLi9pc0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNWYWxpZFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB2YWxpZD9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgZmFsc2UgaWYgYXJndW1lbnQgaXMgSW52YWxpZCBEYXRlIGFuZCB0cnVlIG90aGVyd2lzZS5cbiAqIEFyZ3VtZW50IGlzIGNvbnZlcnRlZCB0byBEYXRlIHVzaW5nIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBJbnZhbGlkIERhdGUgaXMgYSBEYXRlLCB3aG9zZSB0aW1lIHZhbHVlIGlzIE5hTi5cbiAqXG4gKiBUaW1lIHZhbHVlIG9mIERhdGU6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuOS4xLjFcbiAqXG4gKiBAcGFyYW0geyp9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlIGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgyMDE0LCAxLCAzMSkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWx1ZSwgY29udmVydGFibGUgaW50byBhIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKDEzOTM4MDQ4MDAwMDApXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKCcnKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNWYWxpZChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIGlmICghaXNEYXRlKGRpcnR5RGF0ZSkgJiYgdHlwZW9mIGRpcnR5RGF0ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgcmV0dXJuICFpc05hTihOdW1iZXIoZGF0ZSkpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufSIsICJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdGltZXN0YW1wID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59IiwgImltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSBcIi4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9EQVkgPSA4NjQwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0RheU9mWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZZZWFyVGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIHZhciBkaWZmZXJlbmNlID0gdGltZXN0YW1wIC0gc3RhcnRPZlllYXJUaW1lc3RhbXA7XG4gIHJldHVybiBNYXRoLmZsb29yKGRpZmZlcmVuY2UgLyBNSUxMSVNFQ09ORFNfSU5fREFZKSArIDE7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSAxO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgeWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSk7XG4gIHZhciBmb3VydGhPZkphbnVhcnkgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5KTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENJU09XZWVrKGRhdGUpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkYXRlKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgInZhciBkZWZhdWx0T3B0aW9ucyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykge1xuICBkZWZhdWx0T3B0aW9ucyA9IG5ld09wdGlvbnM7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8ud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZmlyc3RXZWVrT2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWtPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mVGhpc1llYXIsIG9wdGlvbnMpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuICB2YXIgeWVhciA9IGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWsgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vlay5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWssIG9wdGlvbnMpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ1dlZWsoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlciwgdGFyZ2V0TGVuZ3RoKSB7XG4gIHZhciBzaWduID0gbnVtYmVyIDwgMCA/ICctJyA6ICcnO1xuICB2YXIgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpO1xuICB3aGlsZSAob3V0cHV0Lmxlbmd0aCA8IHRhcmdldExlbmd0aCkge1xuICAgIG91dHB1dCA9ICcwJyArIG91dHB1dDtcbiAgfVxuICByZXR1cm4gc2lnbiArIG91dHB1dDtcbn0iLCAiaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqL1xudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuXG4gICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09ICd5eScgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbikge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICByZXR1cm4gdG9rZW4gPT09ICdNJyA/IFN0cmluZyhtb250aCArIDEpIDogYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENEYXRlKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRVVENIb3VycygpIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlWzBdO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSAnYW0nID8gJ2EubS4nIDogJ3AubS4nO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDTWludXRlcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgIHZhciBmcmFjdGlvbmFsU2Vjb25kcyA9IE1hdGguZmxvb3IobWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMykpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZnJhY3Rpb25hbFNlY29uZHMsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJpbXBvcnQgZ2V0VVRDRGF5T2ZZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0RheU9mWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuaW1wb3J0IGxpZ2h0Rm9ybWF0dGVycyBmcm9tIFwiLi4vbGlnaHRGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG52YXIgZGF5UGVyaW9kRW51bSA9IHtcbiAgYW06ICdhbScsXG4gIHBtOiAncG0nLFxuICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgbm9vbjogJ25vb24nLFxuICBtb3JuaW5nOiAnbW9ybmluZycsXG4gIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgbmlnaHQ6ICduaWdodCdcbn07XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCBNaWxsaXNlY29uZHMgaW4gZGF5ICAgICAgICAgICAgfFxuICogfCAgYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgfCAgQiAgfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgfFxuICogfCAgYyAgfCBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlayAgfCAgQyogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZSAgfCBMb2NhbCBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgfCAgRSAgfCBEYXkgb2Ygd2VlayAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRiogfCBEYXkgb2Ygd2VlayBpbiBtb250aCAgICAgICAgICAgfFxuICogfCAgZyogfCBNb2RpZmllZCBKdWxpYW4gZGF5ICAgICAgICAgICAgfCAgRyAgfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaSEgfCBJU08gZGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgfCAgSSEgfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgfFxuICogfCAgaiogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfCAgSiogfCBMb2NhbGl6ZWQgaG91ciB3L28gZGF5IHBlcmlvZCAgfFxuICogfCAgayAgfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgfCAgSyAgfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbCogfCAoZGVwcmVjYXRlZCkgICAgICAgICAgICAgICAgICAgfCAgTCAgfCBTdGFuZC1hbG9uZSBtb250aCAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbyEgfCBPcmRpbmFsIG51bWJlciBtb2RpZmllciAgICAgICAgfCAgTyAgfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgfFxuICogfCAgcCEgfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgfCAgUCEgfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgfFxuICogfCAgcSAgfCBTdGFuZC1hbG9uZSBxdWFydGVyICAgICAgICAgICAgfCAgUSAgfCBRdWFydGVyICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgciogfCBSZWxhdGVkIEdyZWdvcmlhbiB5ZWFyICAgICAgICAgfCAgUiEgfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgdCEgfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgfCAgVCEgfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgfFxuICogfCAgdSAgfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgfCAgVSogfCBDeWNsaWMgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgdiogfCBUaW1lem9uZSAoZ2VuZXJpYyBub24tbG9jYXQuKSAgfCAgViogfCBUaW1lem9uZSAobG9jYXRpb24pICAgICAgICAgICAgfFxuICogfCAgdyAgfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgfCAgVyogfCBXZWVrIG9mIG1vbnRoICAgICAgICAgICAgICAgICAgfFxuICogfCAgeCAgfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgfCAgWCAgfCBUaW1lem9uZSAoSVNPLTg2MDEpICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgfFxuICogfCAgeiAgfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgfCAgWiogfCBUaW1lem9uZSAoYWxpYXNlcykgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAhIGFyZSBub24tc3RhbmRhcmQsIGJ1dCBpbXBsZW1lbnRlZCBieSBkYXRlLWZuczpcbiAqIC0gYG9gIG1vZGlmaWVzIHRoZSBwcmV2aW91cyB0b2tlbiB0byB0dXJuIGl0IGludG8gYW4gb3JkaW5hbCAoc2VlIGBmb3JtYXRgIGRvY3MpXG4gKiAtIGBpYCBpcyBJU08gZGF5IG9mIHdlZWsuIEZvciBgaWAgYW5kIGBpaWAgaXMgcmV0dXJucyBudW1lcmljIElTTyB3ZWVrIGRheXMsXG4gKiAgIGkuZS4gNyBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAqIC0gYElgIGlzIElTTyB3ZWVrIG9mIHllYXIsIGFzIG9wcG9zZWQgdG8gYHdgIHdoaWNoIGlzIGxvY2FsIHdlZWsgb2YgeWVhci5cbiAqIC0gYFJgIGlzIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLCBhcyBvcHBvc2VkIHRvIGBZYCB3aGljaCBpcyBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogICBgUmAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJYCBhbmQgYGlgXG4gKiAgIGZvciB1bml2ZXJzYWwgSVNPIHdlZWstbnVtYmVyaW5nIGRhdGUsIHdoZXJlYXNcbiAqICAgYFlgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgd2AgYW5kIGBlYFxuICogICBmb3Igd2Vlay1udW1iZXJpbmcgZGF0ZSBzcGVjaWZpYyB0byB0aGUgbG9jYWxlLlxuICogLSBgUGAgaXMgbG9uZyBsb2NhbGl6ZWQgZGF0ZSBmb3JtYXRcbiAqIC0gYHBgIGlzIGxvbmcgbG9jYWxpemVkIHRpbWUgZm9ybWF0XG4gKi9cblxudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIEVyYVxuICBHOiBmdW5jdGlvbiBHKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBlcmEgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgPiAwID8gMSA6IDA7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gQUQsIEJDXG4gICAgICBjYXNlICdHJzpcbiAgICAgIGNhc2UgJ0dHJzpcbiAgICAgIGNhc2UgJ0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBBLCBCXG4gICAgICBjYXNlICdHR0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcbiAgICAgIGNhc2UgJ0dHR0cnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAneW8nKSB7XG4gICAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoeWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnkoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFk6IGZ1bmN0aW9uIFkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHNpZ25lZFdlZWtZZWFyID0gZ2V0VVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgd2Vla1llYXIgPSBzaWduZWRXZWVrWWVhciA+IDAgPyBzaWduZWRXZWVrWWVhciA6IDEgLSBzaWduZWRXZWVrWWVhcjtcblxuICAgIC8vIFR3byBkaWdpdCB5ZWFyXG4gICAgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgICB2YXIgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7XG4gICAgfVxuXG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICdZbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIFIoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgaXNvV2Vla1llYXIgPSBnZXRVVENJU09XZWVrWWVhcihkYXRlKTtcblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBFeHRlbmRlZCB5ZWFyLiBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZyB0aGUgeWVhciBvZiB0aGlzIGNhbGVuZGFyIHN5c3RlbS5cbiAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIGxvY2FsaXplcnMgYXJlIEIuQy4geWVhcnM6XG4gIC8vIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gIC8vIHwtLS0tLS18LS0tLS18LS0tLS18XG4gIC8vIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gIC8vIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gIC8vIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gIC8vIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAgLy8gd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkLlxuICB1OiBmdW5jdGlvbiB1KGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBRdWFydGVyXG4gIFE6IGZ1bmN0aW9uIFEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAnUSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAnUVEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdRbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAnUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAnUVFRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdRUVFRJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcTogZnVuY3Rpb24gcShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdxJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdxcSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ3FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdxcXFxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ3FxcXEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnTSc6XG4gICAgICBjYXNlICdNTSc6XG4gICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdNbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ01NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTU1NTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ01NTU0nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbiBMKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhtb250aCArIDEpO1xuICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMTCc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ0xvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdMTExMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTExMTCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIHdlZWsgb2YgeWVhclxuICB3OiBmdW5jdGlvbiB3KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciB3ZWVrID0gZ2V0VVRDV2VlayhkYXRlLCBvcHRpb25zKTtcbiAgICBpZiAodG9rZW4gPT09ICd3bycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIEkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGlzb1dlZWsgPSBnZXRVVENJU09XZWVrKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvV2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdkbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDRGF0ZSgpLCB7XG4gICAgICAgIHVuaXQ6ICdkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IGZ1bmN0aW9uIEQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mWWVhciA9IGdldFVUQ0RheU9mWWVhcihkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdEbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwge1xuICAgICAgICB1bml0OiAnZGF5T2ZZZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF5T2ZZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2Ygd2Vla1xuICBFOiBmdW5jdGlvbiBFKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnRSc6XG4gICAgICBjYXNlICdFRSc6XG4gICAgICBjYXNlICdFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ0VFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ0VFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnRUVFRSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgZGF5IG9mIHdlZWtcbiAgZTogZnVuY3Rpb24gZShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbilcbiAgICAgIGNhc2UgJ2UnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2VlJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2VvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2VlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnZWVlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdlZWVlJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiBmdW5jdGlvbiBjKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoc2FtZSBhcyBpbiBgZWApXG4gICAgICBjYXNlICdjJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2NvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnY2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdjY2NjJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBJU08gZGF5IG9mIHdlZWtcbiAgaTogZnVuY3Rpb24gaShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgaXNvRGF5T2ZXZWVrID0gZGF5T2ZXZWVrID09PSAwID8gNyA6IGRheU9mV2VlaztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAyXG4gICAgICBjYXNlICdpJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcbiAgICAgIGNhc2UgJ2lpJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29EYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAybmRcbiAgICAgIGNhc2UgJ2lvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ2lpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnaWlpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdpaWlpJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0sIFBNLCBtaWRuaWdodCwgbm9vblxuICBiOiBmdW5jdGlvbiBiKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA9PT0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYic6XG4gICAgICBjYXNlICdiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2JiYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiYic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiBCKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA+PSAxNykge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ldmVuaW5nO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uYWZ0ZXJub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gNCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5tb3JuaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5pZ2h0O1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdCJzpcbiAgICAgIGNhc2UgJ0JCJzpcbiAgICAgIGNhc2UgJ0JCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2hvJykge1xuICAgICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMTI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ0hvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENIb3VycygpLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIEsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgaWYgKHRva2VuID09PSAnS28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFsxLTI0XVxuICBrOiBmdW5jdGlvbiBrKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7XG4gICAgaWYgKHRva2VuID09PSAna28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdtbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDTWludXRlcygpLCB7XG4gICAgICAgIHVuaXQ6ICdtaW51dGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5tKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnc28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ1NlY29uZHMoKSwge1xuICAgICAgICB1bml0OiAnc2Vjb25kJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5TKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGFsd2F5cyBgJ1onYClcbiAgWDogZnVuY3Rpb24gWChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuICdaJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ1gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgXG4gICAgICBjYXNlICdYWFhYJzpcbiAgICAgIGNhc2UgJ1hYJzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGBcbiAgICAgIGNhc2UgJ1hYWFhYJzpcbiAgICAgIGNhc2UgJ1hYWCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgeDogZnVuY3Rpb24geChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICd4JzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuICAgICAgY2FzZSAneHh4eCc6XG4gICAgICBjYXNlICd4eCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG4gICAgICBjYXNlICd4eHh4eCc6XG4gICAgICBjYXNlICd4eHgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChHTVQpXG4gIE86IGZ1bmN0aW9uIE8oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAnTyc6XG4gICAgICBjYXNlICdPTyc6XG4gICAgICBjYXNlICdPT08nOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnT09PTyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pXG4gIHo6IGZ1bmN0aW9uIHooZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAneic6XG4gICAgICBjYXNlICd6eic6XG4gICAgICBjYXNlICd6enonOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnenp6eic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIHQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gTWF0aC5mbG9vcihvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gVChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBvcmlnaW5hbERhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApO1xuICB2YXIgbWludXRlcyA9IGFic09mZnNldCAlIDYwO1xuICBpZiAobWludXRlcyA9PT0gMCkge1xuICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTtcbiAgfVxuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkge1xuICAgIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpO1xuICB9XG4gIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCksIDIpO1xuICB2YXIgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAidmFyIGRhdGVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIHRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gdGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAncHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHBwJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHZhciBtYXRjaFJlc3VsdCA9IHBhdHRlcm4ubWF0Y2goLyhQKykocCspPy8pIHx8IFtdO1xuICB2YXIgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgdmFyIHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07XG4gIGlmICghdGltZVBhdHRlcm4pIHtcbiAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZyk7XG4gIH1cbiAgdmFyIGRhdGVUaW1lRm9ybWF0O1xuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0LnJlcGxhY2UoJ3t7ZGF0ZX19JywgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcpKS5yZXBsYWNlKCd7e3RpbWV9fScsIHRpbWVMb25nRm9ybWF0dGVyKHRpbWVQYXR0ZXJuLCBmb3JtYXRMb25nKSk7XG59O1xudmFyIGxvbmdGb3JtYXR0ZXJzID0ge1xuICBwOiB0aW1lTG9uZ0Zvcm1hdHRlcixcbiAgUDogZGF0ZVRpbWVMb25nRm9ybWF0dGVyXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9uZ0Zvcm1hdHRlcnM7IiwgIi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkpO1xuICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIHJldHVybiBkYXRlLmdldFRpbWUoKSAtIHV0Y0RhdGUuZ2V0VGltZSgpO1xufSIsICJ2YXIgcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zID0gWydEJywgJ0REJ107XG52YXIgcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMgPSBbJ1lZJywgJ1lZWVknXTtcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgaWYgKHRva2VuID09PSAnWVlZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnRCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnREQnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9XG59IiwgInZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIHNlY29uZCcsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIHhTZWNvbmRzOiB7XG4gICAgb25lOiAnMSBzZWNvbmQnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIGhhbGZBTWludXRlOiAnaGFsZiBhIG1pbnV0ZScsXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBtaW51dGUnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICB4TWludXRlczoge1xuICAgIG9uZTogJzEgbWludXRlJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgaG91cicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhIb3Vyczoge1xuICAgIG9uZTogJzEgaG91cicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhEYXlzOiB7XG4gICAgb25lOiAnMSBkYXknLFxuICAgIG90aGVyOiAne3tjb3VudH19IGRheXMnXG4gIH0sXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB3ZWVrJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgeFdlZWtzOiB7XG4gICAgb25lOiAnMSB3ZWVrJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgYWJvdXRYTW9udGhzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBtb250aCcsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICB4TW9udGhzOiB7XG4gICAgb25lOiAnMSBtb250aCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIHhZZWFyczoge1xuICAgIG9uZTogJzEgeWVhcicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6ICdvdmVyIDEgeWVhcicsXG4gICAgb3RoZXI6ICdvdmVyIHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiAnYWxtb3N0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhbG1vc3Qge3tjb3VudH19IHllYXJzJ1xuICB9XG59O1xudmFyIGZvcm1hdERpc3RhbmNlID0gZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UodG9rZW4sIGNvdW50LCBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQ7XG4gIHZhciB0b2tlblZhbHVlID0gZm9ybWF0RGlzdGFuY2VMb2NhbGVbdG9rZW5dO1xuICBpZiAodHlwZW9mIHRva2VuVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZSgne3tjb3VudH19JywgY291bnQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gJ2luICcgKyByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAnIGFnbyc7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGlzdGFuY2U7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRm9ybWF0TG9uZ0ZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgLy8gVE9ETzogUmVtb3ZlIFN0cmluZygpXG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgIHZhciBmb3JtYXQgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkRm9ybWF0TG9uZ0ZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuL2luZGV4LmpzXCI7XG52YXIgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdFRUVFLCBNTU1NIGRvLCB5JyxcbiAgbG9uZzogJ01NTU0gZG8sIHknLFxuICBtZWRpdW06ICdNTU0gZCwgeScsXG4gIHNob3J0OiAnTU0vZGQveXl5eSdcbn07XG52YXIgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdoOm1tOnNzIGEgenp6eicsXG4gIGxvbmc6ICdoOm1tOnNzIGEgeicsXG4gIG1lZGl1bTogJ2g6bW06c3MgYScsXG4gIHNob3J0OiAnaDptbSBhJ1xufTtcbnZhciBkYXRlVGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbWVkaXVtOiAne3tkYXRlfX0sIHt7dGltZX19JyxcbiAgc2hvcnQ6ICd7e2RhdGV9fSwge3t0aW1lfX0nXG59O1xudmFyIGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdExvbmc7IiwgInZhciBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6ICdQJ1xufTtcbnZhciBmb3JtYXRSZWxhdGl2ZSA9IGZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlKHRva2VuLCBfZGF0ZSwgX2Jhc2VEYXRlLCBfb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UmVsYXRpdmVMb2NhbGVbdG9rZW5dO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFJlbGF0aXZlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZExvY2FsaXplRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRpcnR5SW5kZXgsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogJ3N0YW5kYWxvbmUnO1xuICAgIHZhciB2YWx1ZXNBcnJheTtcbiAgICBpZiAoY29udGV4dCA9PT0gJ2Zvcm1hdHRpbmcnICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciB3aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBkZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1t3aWR0aF0gfHwgYXJncy5mb3JtYXR0aW5nVmFsdWVzW2RlZmF1bHRXaWR0aF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgX3dpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1tfd2lkdGhdIHx8IGFyZ3MudmFsdWVzW19kZWZhdWx0V2lkdGhdO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2soZGlydHlJbmRleCkgOiBkaXJ0eUluZGV4O1xuICAgIC8vIEB0cy1pZ25vcmU6IEZvciBzb21lIHJlYXNvbiBUeXBlU2NyaXB0IGp1c3QgZG9uJ3Qgd2FudCB0byBtYXRjaCBpdCwgbm8gbWF0dGVyIGhvdyBoYXJkIHdlIHRyeS4gSSBjaGFsbGVuZ2UgeW91IHRvIHRyeSB0byByZW1vdmUgaXQhXG4gICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4XTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTG9jYWxpemVGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanNcIjtcbnZhciBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydCJywgJ0EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnQkMnLCAnQUQnXSxcbiAgd2lkZTogWydCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJ11cbn07XG52YXIgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbJzEnLCAnMicsICczJywgJzQnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnUTEnLCAnUTInLCAnUTMnLCAnUTQnXSxcbiAgd2lkZTogWycxc3QgcXVhcnRlcicsICcybmQgcXVhcnRlcicsICczcmQgcXVhcnRlcicsICc0dGggcXVhcnRlciddXG59O1xuXG4vLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG52YXIgbW9udGhWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydKJywgJ0YnLCAnTScsICdBJywgJ00nLCAnSicsICdKJywgJ0EnLCAnUycsICdPJywgJ04nLCAnRCddLFxuICBhYmJyZXZpYXRlZDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuICB3aWRlOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXVxufTtcbnZhciBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ10sXG4gIHNob3J0OiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXG4gIGFiYnJldmlhdGVkOiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuICB3aWRlOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J11cbn07XG52YXIgZGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH1cbn07XG52YXIgZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9XG59O1xudmFyIG9yZGluYWxOdW1iZXIgPSBmdW5jdGlvbiBvcmRpbmFsTnVtYmVyKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykge1xuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICAvLyBJZiBvcmRpbmFsIG51bWJlcnMgZGVwZW5kIG9uIGNvbnRleHQsIGZvciBleGFtcGxlLFxuICAvLyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCBncmFtbWF0aWNhbCBnZW5kZXJzLFxuICAvLyB1c2UgYG9wdGlvbnMudW5pdGAuXG4gIC8vXG4gIC8vIGB1bml0YCBjYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RhdGUnLCAnZGF5T2ZZZWFyJyxcbiAgLy8gJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLlxuXG4gIHZhciByZW0xMDAgPSBudW1iZXIgJSAxMDA7XG4gIGlmIChyZW0xMDAgPiAyMCB8fCByZW0xMDAgPCAxMCkge1xuICAgIHN3aXRjaCAocmVtMTAwICUgMTApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdzdCc7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnbmQnO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3JkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bWJlciArICd0aCc7XG59O1xudmFyIGxvY2FsaXplID0ge1xuICBvcmRpbmFsTnVtYmVyOiBvcmRpbmFsTnVtYmVyLFxuICBlcmE6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBlcmFWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IGZ1bmN0aW9uIGFyZ3VtZW50Q2FsbGJhY2socXVhcnRlcikge1xuICAgICAgcmV0dXJuIHF1YXJ0ZXIgLSAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogbW9udGhWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogJ3dpZGUnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxpemU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGg7XG4gICAgdmFyIG1hdGNoUGF0dGVybiA9IHdpZHRoICYmIGFyZ3MubWF0Y2hQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5tYXRjaFBhdHRlcm5zW2FyZ3MuZGVmYXVsdE1hdGNoV2lkdGhdO1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChtYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG4gICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkocGFyc2VQYXR0ZXJucykgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSkgOiBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59XG5mdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkgJiYgcHJlZGljYXRlKG9iamVjdFtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoUGF0dGVybkZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MubWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7XG4gICAgaWYgKCFwYXJzZVJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKHBhcnNlUmVzdWx0WzBdKSA6IHBhcnNlUmVzdWx0WzBdO1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59IiwgImltcG9ydCBidWlsZE1hdGNoRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaEZuL2luZGV4LmpzXCI7XG5pbXBvcnQgYnVpbGRNYXRjaFBhdHRlcm5GbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuL2luZGV4LmpzXCI7XG52YXIgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKHRofHN0fG5kfHJkKT8vaTtcbnZhciBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcbnZhciBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGJ8YSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGJcXC4/XFxzP2NcXC4/fGJcXC4/XFxzP2NcXC4/XFxzP2VcXC4/fGFcXC4/XFxzP2RcXC4/fGNcXC4/XFxzP2VcXC4/KS9pLFxuICB3aWRlOiAvXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2lcbn07XG52YXIgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL15iL2ksIC9eKGF8YykvaV1cbn07XG52YXIgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaVxufTtcbnZhciBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV1cbn07XG52YXIgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2lcbn07XG52YXIgcGFyc2VNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXmovaSwgL15mL2ksIC9ebS9pLCAvXmEvaSwgL15tL2ksIC9eai9pLCAvXmovaSwgL15hL2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXSxcbiAgYW55OiBbL15qYS9pLCAvXmYvaSwgL15tYXIvaSwgL15hcC9pLCAvXm1heS9pLCAvXmp1bi9pLCAvXmp1bC9pLCAvXmF1L2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXVxufTtcbnZhciBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pXG59O1xudmFyIHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXVxufTtcbnZhciBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaVxufTtcbnZhciBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL15hL2ksXG4gICAgcG06IC9ecC9pLFxuICAgIG1pZG5pZ2h0OiAvXm1pL2ksXG4gICAgbm9vbjogL15uby9pLFxuICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksXG4gICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksXG4gICAgZXZlbmluZzogL2V2ZW5pbmcvaSxcbiAgICBuaWdodDogL25pZ2h0L2lcbiAgfVxufTtcbnZhciBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKHZhbHVlKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH0pLFxuICBlcmE6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2soaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCArIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICdhbnknLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbWF0Y2g7IiwgImltcG9ydCBmb3JtYXREaXN0YW5jZSBmcm9tIFwiLi9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0TG9uZyBmcm9tIFwiLi9fbGliL2Zvcm1hdExvbmcvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRSZWxhdGl2ZSBmcm9tIFwiLi9fbGliL2Zvcm1hdFJlbGF0aXZlL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9jYWxpemUgZnJvbSBcIi4vX2xpYi9sb2NhbGl6ZS9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoIGZyb20gXCIuL19saWIvbWF0Y2gvaW5kZXguanNcIjtcbi8qKlxuICogQHR5cGUge0xvY2FsZX1cbiAqIEBjYXRlZ29yeSBMb2NhbGVzXG4gKiBAc3VtbWFyeSBFbmdsaXNoIGxvY2FsZSAoVW5pdGVkIFN0YXRlcykuXG4gKiBAbGFuZ3VhZ2UgRW5nbGlzaFxuICogQGlzby02MzktMiBlbmdcbiAqIEBhdXRob3IgU2FzaGEgS29zcyBbQGtvc3Nub2NvcnBde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9rb3Nzbm9jb3JwfVxuICogQGF1dGhvciBMZXNoYSBLb3NzIFtAbGVzaGFrb3NzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbGVzaGFrb3NzfVxuICovXG52YXIgbG9jYWxlID0ge1xuICBjb2RlOiAnZW4tVVMnLFxuICBmb3JtYXREaXN0YW5jZTogZm9ybWF0RGlzdGFuY2UsXG4gIGZvcm1hdExvbmc6IGZvcm1hdExvbmcsXG4gIGZvcm1hdFJlbGF0aXZlOiBmb3JtYXRSZWxhdGl2ZSxcbiAgbG9jYWxpemU6IGxvY2FsaXplLFxuICBtYXRjaDogbWF0Y2gsXG4gIG9wdGlvbnM6IHtcbiAgICB3ZWVrU3RhcnRzT246IDAgLyogU3VuZGF5ICovLFxuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMVxuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxlOyIsICJpbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vLi4vbG9jYWxlL2VuLVVTL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0TG9jYWxlOyIsICJpbXBvcnQgaXNWYWxpZCBmcm9tIFwiLi4vaXNWYWxpZC9pbmRleC5qc1wiO1xuaW1wb3J0IHN1Yk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9uZ0Zvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuLCBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4sIHRocm93UHJvdGVjdGVkRXJyb3IgfSBmcm9tIFwiLi4vX2xpYi9wcm90ZWN0ZWRUb2tlbnMvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qc1wiOyAvLyBUaGlzIFJlZ0V4cCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cyBzZXBhcmF0ZWQgYnkgYHxgOlxuLy8gLSBbeVlRcU1Md0lkRGVjaWhIS2ttc11vIG1hdGNoZXMgYW55IGF2YWlsYWJsZSBvcmRpbmFsIG51bWJlciB0b2tlblxuLy8gICAob25lIG9mIHRoZSBjZXJ0YWluIGxldHRlcnMgZm9sbG93ZWQgYnkgYG9gKVxuLy8gLSAoXFx3KVxcMSogbWF0Y2hlcyBhbnkgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIGxldHRlclxuLy8gLSAnJyBtYXRjaGVzIHR3byBxdW90ZSBjaGFyYWN0ZXJzIGluIGEgcm93XG4vLyAtICcoJyd8W14nXSkrKCd8JCkgbWF0Y2hlcyBhbnl0aGluZyBzdXJyb3VuZGVkIGJ5IHR3byBxdW90ZSBjaGFyYWN0ZXJzICgnKSxcbi8vICAgZXhjZXB0IGEgc2luZ2xlIHF1b3RlIHN5bWJvbCwgd2hpY2ggZW5kcyB0aGUgc2VxdWVuY2UuXG4vLyAgIFR3byBxdW90ZSBjaGFyYWN0ZXJzIGRvIG5vdCBlbmQgdGhlIHNlcXVlbmNlLlxuLy8gICBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBzaW5nbGUgcXVvdGVcbi8vICAgdGhlbiB0aGUgc2VxdWVuY2Ugd2lsbCBjb250aW51ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG4vLyAtIC4gbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciB1bm1hdGNoZWQgYnkgcHJldmlvdXMgcGFydHMgb2YgdGhlIFJlZ0V4cHNcbnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG4vLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG52YXIgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcbnZhciBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG52YXIgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbnZhciB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG5cbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqID4gXHUyNkEwXHVGRTBGIFBsZWFzZSBub3RlIHRoYXQgdGhlIGBmb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKiAoc2VlIHRoZSBsYXN0IGV4YW1wbGUpXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDcgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBBY2NlcHRlZCBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDB0aCwgMTd0aCAgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgMjAxN3RoICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgUiAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSICAgICAgfCAtNDMsIDAwLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAwLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAwLCAwMDAxLCAxOTAwLCAyMDE3ICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUsNyB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCB1ICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCA3ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhICAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWEgICAgIHwgYW0sIHBtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCBiLi5iYiAgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiICAgICB8IGFtLCBwbSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmIgICAgfCBhLm0uLCBwLm0uLCBub29uLCBtaWRuaWdodCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiYiAgIHwgYSwgcCwgbiwgbWkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgIHwgQi4uQkJCICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkIgICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCQiAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgIHwgaCAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAxMnRoICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaCAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhvICAgICAgfCAwdGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgIHwgSyAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAwdGggICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLSyAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgIHwgayAgICAgICB8IDI0LCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtvICAgICAgfCAyNHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrayAgICAgIHwgMjQsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbSAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbSAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcyAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcyAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDEsIC4uLiwgOTk5ICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICAgfCBPLi4uT09PIHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT09PTyAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pICB8IHouLi56enogfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCA2ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB6enp6ICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiw2ICAgfFxuICogfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgIHwgdCAgICAgICB8IDUxMjk2OTUyMCAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR0ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8IFAgICAgICAgfCAwNC8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUCAgICAgIHwgQXByIDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQICAgICB8IEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFAgICAgfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcCAgICAgfCAxMjowMDowMCBBTSBHTVQrMiAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHBwICAgIHwgMTI6MDA6MDAgQU0gR01UKzAyOjAwICAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBDb21iaW5hdGlvbiBvZiBkYXRlIGFuZCB0aW1lICAgIHwgUHAgICAgICB8IDA0LzI5LzE0NTMsIDEyOjAwIEFNICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQcHAgICAgfCBBcHIgMjksIDE0NTMsIDEyOjAwOjAwIEFNICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBwcHAgIHwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUHBwcHB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICB8IDIsNyAgIHxcbiAqIE5vdGVzOlxuICogMS4gXCJGb3JtYXR0aW5nXCIgdW5pdHMgKGUuZy4gZm9ybWF0dGluZyBxdWFydGVyKSBpbiB0aGUgZGVmYXVsdCBlbi1VUyBsb2NhbGVcbiAqICAgIGFyZSB0aGUgc2FtZSBhcyBcInN0YW5kLWFsb25lXCIgdW5pdHMsIGJ1dCBhcmUgZGlmZmVyZW50IGluIHNvbWUgbGFuZ3VhZ2VzLlxuICogICAgXCJGb3JtYXR0aW5nXCIgdW5pdHMgYXJlIGRlY2xpbmVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxhbmd1YWdlXG4gKiAgICBpbiB0aGUgY29udGV4dCBvZiBhIGRhdGUuIFwiU3RhbmQtYWxvbmVcIiB1bml0cyBhcmUgYWx3YXlzIG5vbWluYXRpdmUgc2luZ3VsYXI6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqIDIuIEFueSBzZXF1ZW5jZSBvZiB0aGUgaWRlbnRpY2FsIGxldHRlcnMgaXMgYSBwYXR0ZXJuLCB1bmxlc3MgaXQgaXMgZXNjYXBlZCBieVxuICogICAgdGhlIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIChzZWUgYmVsb3cpLlxuICogICAgSWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIGxpc3RlZCBpbiB0YWJsZSAoZS5nLiBgRUVFRUVFRUVFRUVgKVxuICogICAgdGhlIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRlZmF1bHQgcGF0dGVybiBmb3IgdGhpcyB1bml0LCB1c3VhbGx5XG4gKiAgICB0aGUgbG9uZ2VzdCBvbmUgKGluIGNhc2Ugb2YgSVNPIHdlZWtkYXlzLCBgRUVFRWApLiBEZWZhdWx0IHBhdHRlcm5zIGZvciB1bml0c1xuICogICAgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU0nKSAvLz0+ICdOb3YnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NJykgLy89PiAnTidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqIDMuIFNvbWUgcGF0dGVybnMgY291bGQgYmUgdW5saW1pdGVkIGxlbmd0aCAoc3VjaCBhcyBgeXl5eXl5eXlgKS5cbiAqICAgIFRoZSBvdXRwdXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB6ZXJvcyB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAneXl5eXl5eXknKSAvLz0+ICcwMDAwMjAxNydgXG4gKlxuICogNC4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNS4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAqICAgIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZDpcbiAqXG4gKiAgICB8IFllYXIgfCBgeXlgIHwgYHV1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gKiAgICB8IDEgICAgfCAgIDAxIHwgICAwMSB8XG4gKiAgICB8IDE0ICAgfCAgIDE0IHwgICAxNCB8XG4gKiAgICB8IDM3NiAgfCAgIDc2IHwgIDM3NiB8XG4gKiAgICB8IDE0NTMgfCAgIDUzIHwgMTQ1MyB8XG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbZ2V0SVNPV2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0SVNPV2Vla1llYXJ9XG4gKiAgICBhbmQgW2dldFdlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldFdlZWtZZWFyfSkuXG4gKlxuICogNi4gU3BlY2lmaWMgbm9uLWxvY2F0aW9uIHRpbWV6b25lcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGluIGBkYXRlLWZuc2AsXG4gKiAgICBzbyByaWdodCBub3cgdGhlc2UgdG9rZW5zIGZhbGwgYmFjayB0byBHTVQgdGltZXpvbmVzLlxuICpcbiAqIDcuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYHRgOiBzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgVGA6IG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogOC4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA5LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIGRheXMgb2YgdGhlIG1vbnRoLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIHRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIgdG9rZW5zIGBZWWAgYW5kIGBZWVlZYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSBkYXkgb2YgeWVhciB0b2tlbnMgYERgIGFuZCBgRERgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRMb25nYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgN1xuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdChkaXJ0eURhdGUsIGRpcnR5Rm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfb3B0aW9ucyRsb2NhbGUsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlMiwgX29wdGlvbnMkbG9jYWxlMiRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIsIF9yZWY1LCBfcmVmNiwgX3JlZjcsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlMywgX29wdGlvbnMkbG9jYWxlMyRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0O1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGZvcm1hdFN0ciA9IFN0cmluZyhkaXJ0eUZvcm1hdFN0cik7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBsb2NhbGUgPSAoX3JlZiA9IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRsb2NhbGUgIT09IHZvaWQgMCA/IF9vcHRpb25zJGxvY2FsZSA6IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IGRlZmF1bHRMb2NhbGU7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYyID0gKF9yZWYzID0gKF9yZWY0ID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiRvcHRpID0gX29wdGlvbnMkbG9jYWxlMi5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTIkb3B0aS5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWY0ICE9PSB2b2lkIDAgPyBfcmVmNCA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWY1ID0gKF9yZWY2ID0gKF9yZWY3ID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyRvcHRpID0gX29wdGlvbnMkbG9jYWxlMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTMkb3B0aS53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY3ICE9PSB2b2lkIDAgPyBfcmVmNyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjYgIT09IHZvaWQgMCA/IF9yZWY2IDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0LndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjUgIT09IHZvaWQgMCA/IF9yZWY1IDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIGlmICghbG9jYWxlLmxvY2FsaXplKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gbG9jYWxpemUgcHJvcGVydHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5mb3JtYXRMb25nKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gZm9ybWF0TG9uZyBwcm9wZXJ0eScpO1xuICB9XG4gIHZhciBvcmlnaW5hbERhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIH1cblxuICAvLyBDb252ZXJ0IHRoZSBkYXRlIGluIHN5c3RlbSB0aW1lem9uZSB0byB0aGUgc2FtZSBkYXRlIGluIFVUQyswMDowMCB0aW1lem9uZS5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBVVEMgZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQsIGxvY2FsZXMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlbS5cbiAgLy8gU2VlIGFuIGlzc3VlIGFib3V0IFVUQyBmdW5jdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG4gIHZhciB0aW1lem9uZU9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlKTtcbiAgdmFyIHV0Y0RhdGUgPSBzdWJNaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlLCB0aW1lem9uZU9mZnNldCk7XG4gIHZhciBmb3JtYXR0ZXJPcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbjogd2Vla1N0YXJ0c09uLFxuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIF9vcmlnaW5hbERhdGU6IG9yaWdpbmFsRGF0ZVxuICB9O1xuICB2YXIgcmVzdWx0ID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICdwJyB8fCBmaXJzdENoYXJhY3RlciA9PT0gJ1AnKSB7XG4gICAgICB2YXIgbG9uZ0Zvcm1hdHRlciA9IGxvbmdGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgIHJldHVybiBcIidcIjtcbiAgICB9XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCInXCIpIHtcbiAgICAgIHJldHVybiBjbGVhbkVzY2FwZWRTdHJpbmcoc3Vic3RyaW5nKTtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdHRlcih1dGNEYXRlLCBzdWJzdHJpbmcsIGxvY2FsZS5sb2NhbGl6ZSwgZm9ybWF0dGVyT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChmaXJzdENoYXJhY3Rlci5tYXRjaCh1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCcgKyBmaXJzdENoYXJhY3RlciArICdgJyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIHZhciBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICByZXR1cm4gbWF0Y2hlZFsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwLCBcIidcIik7XG59IiwgImV4cG9ydCBjb25zdCBwb2ludHNOb3RlTWFqdXJpdHkgPSAxMDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNNYWp1cml0eSA9IDEwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgPSA1MDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgPSAyMDAwO1xyXG5leHBvcnQgY29uc3QgYXZhdGFySW5pdENvbnRlbnQgPSAgYCMgQXZhdGFyXHJcblxyXG58ICAgICAgICB8ICAgICB8XHJcbnwgLS0tLS0tIHwgLS0tIHxcclxufCBMZXZlbCAgfCAwICAgIHxcclxufCBQb2ludHMgfCAwICAgIHxcclxuXmxldmVsQW5kUG9pbnRzXHRcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW0V4cHJpcmllbmNlXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXHJcbiAgICBkYXRhOiBbMTAwMF1cclxueE1pbjogMFxyXG54TWF4OiAxMDAwXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XHJcbnwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0gfFxyXG58ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqMCoqIHxcclxuXmJvb3N0ZXJGYWN0b3JcclxufCAgICAgICAgICAgICB8ICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLSB8IC0tLSB8IC0tLS0tIHxcclxufCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKiowLzIqKiB8XHJcbl5kYWlseU5vdGVzQ2hhbGxlbmdlXHJcbnwgIHwgICAgIHx8XHJcbnwgLS0tLSB8IC0tLSB8IC0tLSB8XHJcbnwgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKjAvNyoqICAgfFxyXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW05vdGVzXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogZGF5cyBkb25lIGluIGEgcm93XHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XHJcbiAgICBkYXRhOiBbN11cclxueE1pbjogMFxyXG54TWF4OiA3XHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwiZGF5c1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58IExldmVsIHwgQ291bnQgfFxyXG58IDotLS06IHwgOi0tLTogfFxyXG58IE1hanVyaXR5IDUgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs1LCAnNScsICc1XHUyN0ExXHVGRTBGJywgJzVcdTJCMDdcdUZFMEYnLCAnNVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDQgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs0LCAnNCcsICc0XHUyN0ExXHVGRTBGJywgJzRcdTJCMDdcdUZFMEYnLCAnNFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDMgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFszLCAnMycsICczXHUyN0ExXHVGRTBGJywgJzNcdTJCMDdcdUZFMEYnLCAnM1x1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDIgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsyLCAnMicsICcyXHUyN0ExXHVGRTBGJywgJzJcdTJCMDdcdUZFMEYnLCAnMlx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDEgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsxLCAnMScsICcxXHUyN0ExXHVGRTBGJywgJzFcdTJCMDdcdUZFMEYnLCAnMVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDAgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFswLCAnMCcsICcwXHUyN0ExXHVGRTBGJywgJzBcdTJCMDdcdUZFMEYnLCAnMFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG5cclxuXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFswLCAwLCAwXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogbW9kaWZpZWRcclxuICAgIGRhdGE6IFswLCAwLCAwXVxyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDgwICVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxueVRpdGxlOiBcIk51bWJlciBvZiBOb3Rlc1wiXHJcbnhUaXRsZTogXCJNb250aHNcIlxyXG54TWluOiAwXHJcblxcYFxcYFxcYFxyXG5eQ2hhcnRNb250aFxyXG5cclxuXHJcbiMjIyBCYWRnZXNcclxuIyMjIyBhY2hpZXZlZFxyXG5cclxuXHJcbiMjIyMgb3V0c3RhbmRpbmdcclxubGV2ZWwgNTogKkVubGlnaHRlbmVkIE5vdmljZSpcclxubGV2ZWwgMTA6ICpDdXJpb3VzIENvbm5vaXNzZXVyKlxyXG5sZXZlbCAyMDogKkJyYWluaWFjIFRyYWlsYmxhemVyKlxyXG5sZXZlbCAyNzogKlNjaG9sYXJseSBUcmFpbGJsYXplcipcclxubGV2ZWwgMzU6ICpJbmZvIE5pbmphIE1hc3RlcipcclxubGV2ZWwgNDI6ICpXaXNlIE93bCBHdXJ1KlxyXG5sZXZlbCA1MDogKkVpbnN0ZWluIEluY2FybmF0ZSpcclxubGV2ZWwgNjA6ICpNYXN0ZXJtaW5kIFNhZ2UqXHJcbmxldmVsIDc1OiAqQ2VyZWJyYWwgTWFlc3RybypcclxubGV2ZWwgODI6ICpaZW4gS25vd2xlZGdlIEtlZXBlcipcclxubGV2ZWwgOTA6ICpHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQqXHJcbmxldmVsIDEwMDogKk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nKlxyXG5cclxuXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNSoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA1IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA0KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDQgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAzXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAzIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDFcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDEgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAwXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAwIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuYDtcclxuIiwgImltcG9ydCB7IFRGaWxlLCBBcHAsIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZVByb2dyZXNzaXZlU3VtbWFyaXphdGlvbihjaGFyQ291bnRUb3RhbDogbnVtYmVyLCBsYXllcjJjb3VudDogbnVtYmVyLCBsYXllcjNjb3VudDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRjb25zdCBwZXJjZW50TGF5ZXIyID0gbGF5ZXIyY291bnQgKiAxMDAgLyBjaGFyQ291bnRUb3RhbDtcclxuICAgIGNvbnN0IHBlcmNlbnRMYXllcjMgPSBsYXllcjNjb3VudCAqIDEwMCAvIGxheWVyMmNvdW50O1xyXG5cdHZhciBsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0dmFyIGxheWVyM21hanVyaXR5ID0gMDtcclxuXHR2YXIgbWFqdXJpdHkgPSAwO1xyXG5cdGlmIChjaGFyQ291bnRUb3RhbCA8IDMwMDApIHtcclxuXHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdC8vY29uc29sZS5sb2coYE5vdGUgaXMgbm90IGxvbmcgZW5vdWdoIHRvIGdldCBpbnRvIGNhbGN1bGF0aW9uIGZvciBtYWp1cml0eS4gVGhlIHRvdGFsIGNoYXJhY3RlciBjb3VudCBpcyAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRpZiAocGVyY2VudExheWVyMiA9PSAwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDMwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjNjb3VudCA9PSAwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjJtYWp1cml0eSA9PSAxICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSAyICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA+PSAzICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmICgobGF5ZXIybWFqdXJpdHkgPT0gMyB8fCBsYXllcjJtYWp1cml0eSA9PSA0KSAmJiAobGF5ZXIzbWFqdXJpdHkgPT0gNCB8fCBsYXllcjNtYWp1cml0eSA9PSA1KSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDUgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gNSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRcclxuXHQvL2NvbnNvbGUubG9nKGBsYXllcjJtYWp1cml0eTogJHtsYXllcjJtYWp1cml0eX0gXFx0bGF5ZXIzbWFqdXJpdHk6ICR7bGF5ZXIzbWFqdXJpdHl9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYHBlcmNlbnRMYXllcjI6ICR7cGVyY2VudExheWVyMn0gXFx0cGVyY2VudExheWVyMzogJHtwZXJjZW50TGF5ZXIzfSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBjaGFyQ291bnRUb3RhbDogJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHRyZXR1cm4gbWFqdXJpdHk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgbGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKTogeyBjaGFyQ291bnQ6IG51bWJlcjsgaGlnaGxpZ2h0ZWRDb3VudDogbnVtYmVyOyBib2xkQ291bnQ6IG51bWJlciB9IHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblxyXG5cdC8vIGNhbGN1bGF0ZSBMYXllciAyICYgMyBMZW5ndGhcclxuXHJcblx0Ly8gQ291bnQgdGhlIGhpZ2hsaWdodGVkIGFuZCBib2xkIGNoYXJhY3RlcnNcclxuXHRsZXQgaGlnaGxpZ2h0ZWRDb3VudCA9IDA7XHJcblx0bGV0IGJvbGRDb3VudCA9IDA7XHJcbiAgXHJcblx0dmFyIGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR2YXIgbGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHQvLyB0byBoYXZlIHRoZSByZWcgZXggY29ycmVjdC4gb3RoZXJ3aXNlIGl0IHdpbGwgZ2V0IHN0dWMgd2l0aCAqKi5cclxuXHRpZihsYXllcjMgPT0gJyoqJyl7XHJcblx0XHRsYXllcjMgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0XHRsYXllcjJleGNsdWRlID0gJz0nXHJcblx0fVxyXG5cdGlmKGxheWVyMiA9PSAnKionKXtcclxuXHRcdGxheWVyMiA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICc9J1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICdcXFxcKidcclxuXHR9XHJcbiAgXHRcclxuXHJcblx0Y29uc3QgaGlnaGxpZ2h0UmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyMn1bXiR7bGF5ZXIyZXhjbHVkZX1dKyR7bGF5ZXIyfWAsIFwiZ1wiKTtcclxuICAgIGNvbnN0IGJvbGRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIzfVteJHtsYXllcjNleGNsdWRlfV0rJHtsYXllcjN9YCwgXCJnXCIpO1xyXG4gIFxyXG5cdC8vIENvdW50IGhpZ2hsaWdodGVkIGNoYXJhY3RlcnNcclxuXHRjb25zdCBoaWdobGlnaHRlZE1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKGhpZ2hsaWdodFJlZ2V4KTtcclxuXHRpZiAoaGlnaGxpZ2h0ZWRNYXRjaGVzKSB7XHJcblx0ICBoaWdobGlnaHRlZENvdW50ID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGhpZ2hsaWdodGVkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnPT0nXHJcblx0ICAvLyBmaXJzdCB0YWtlIHRoZSBsYXllcjIgKGhpZ2hsaWdodGVkQ291bnQpIGFuZCBydW4gb24gdGhpcyB0aGUgJ2JvbGRSZWdleCdcclxuXHQgIC8vIENvdW50IGJvbGQgY2hhcmFjdGVyc1xyXG5cdCAgY29uc3QgbGF5ZXIyU3RyaW5nID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIik7XHJcblx0ICBjb25zdCBib2xkTWF0Y2hlcyA9IGxheWVyMlN0cmluZy5tYXRjaChib2xkUmVnZXgpO1xyXG5cdCAgaWYgKGJvbGRNYXRjaGVzKSB7XHJcblx0ICAgIGJvbGRDb3VudCA9IGJvbGRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGJvbGRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICcqKidcclxuXHQgIH1cclxuXHR9XHJcbiAgXHJcblx0XHJcblx0XHJcbiAgXHJcblx0cmV0dXJuIHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfTtcclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxldmVsT2ZNYXR1cml0eShub3RlTGVuZ3RoOiBudW1iZXIsIGxlbmd0aE9mVGl0bGU6IG51bWJlciwgSW5saW5rczogbnVtYmVyLCBvdXRnb2luZ0xpbmtzOiBudW1iZXIsIHByb2dyZXNzaXZlU3VtTWFqdXJpdHk6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG5vdGVMZW5ndGg6ICR7bm90ZUxlbmd0aH1cXHRsZW5ndGhPZlRpdGxlOiAke2xlbmd0aE9mVGl0bGV9XFx0SW5saW5rczogJHtJbmxpbmtzfVxcdG91dGdvaW5nTGlua3M6ICR7b3V0Z29pbmdMaW5rc31gKVxyXG5cdFxyXG5cdC8vIGRlY2lkZSBpZiBub3RlTGVuZ3RoLW1hanVyaXR5IG9yIHByb2dyZXNzaXZlU3VtLW1hanVyaXR5IHNoYWxsIGJlIHVzZWRcclxuXHR2YXIgbGVuZ3RoTWFqdXJpdHkgPSAwO1xyXG5cdGlmKG5vdGVMZW5ndGggPj0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eSkge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBub3RlTGVuZ3RoO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IHByb2dyZXNzaXZlU3VtTWFqdXJpdHk7XHJcblx0fVxyXG5cdFxyXG5cdGNvbnN0IHRvdGFsV2VpZ2h0IDogbnVtYmVyID0gbGVuZ3RoTWFqdXJpdHkgKyBsZW5ndGhPZlRpdGxlICsgSW5saW5rcyArIG91dGdvaW5nTGlua3M7XHJcblx0Y29uc3QgYXZlcmFnZVdlaWdodCA9IHRvdGFsV2VpZ2h0IC8gNTtcclxuXHQvLyBjb25zb2xlLmxvZyhgdG90YWxXZWlnaHQ6ICR7dG90YWxXZWlnaHR9XFx0YXZlcmFnZVdlaWdodDogJHthdmVyYWdlV2VpZ2h0fWApXHJcblx0aWYgKGF2ZXJhZ2VXZWlnaHQgPCAwLjUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAxKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMikge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzLjUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSA0KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVPdXRsaW5rcyhvdXRsaW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgb3V0bGlua3M6ICR7b3V0bGlua3N9YClcclxuXHRpZiAob3V0bGlua3MgPCAyKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMykge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA5KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMikge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlSW5saW5rcyhudW1JbmxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vdmFyIHByb3plbnRJbmxpbmtzID0gbnVtSW5saW5rcyAqIDEwMCAvIG51bUFsbEZpbGVzO1xyXG5cdC8vY29uc29sZS5sb2coYG51bUlubGlua3M6ICR7bnVtSW5saW5rc31cXHRudW1BbGxGaWxlczogJHtudW1BbGxGaWxlc31cXHRwcm96ZW50SW5saW5rczogJHtwcm96ZW50SW5saW5rc31gKVxyXG5cdC8qaWYgKHByb3plbnRJbmxpbmtzIDwgMC4wMDUgfHwgcHJvemVudElubGlua3MgPiAwLjEpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSAqLyBpZiAobnVtSW5saW5rcyA9PSAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA0KSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA4KSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTYpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA+PSAxNiAmJiBudW1JbmxpbmtzIDwgNTAwICkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlRGlyZWN0aW9uKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCByYXRpbmcgPSBcIlwiXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA+IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwN1x1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDZcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID09IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MjdBMVx1RkUwRlwiXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXCJcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGVuZ3RoRmlsZW5hbWUoZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDMwKSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCA4MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTAwKSB7XHJcblx0cmV0dXJuIDM7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxNTApIHtcclxuXHRyZXR1cm4gNTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE5MCkge1xyXG5cdHJldHVybiA0O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjEwKSB7XHJcblx0cmV0dXJuIDI7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyNTApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2Uge1xyXG5cdHJldHVybiAwO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTm90ZUxlbmd0aChjb250ZW5sZW5ndGg6IG51bWJlcik6IG51bWJlciB7XHJcblx0aWYgKGNvbnRlbmxlbmd0aCA8IDIwMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCA1NTApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTAwMCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMjAwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDIwMDApIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjUwMCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAzMDAwKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWJlck9mT3V0bGlua3MoYWN0aXZlRmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG5cdC8vIGNvbnN0IGFjdGl2ZUZpbGU6IFRGaWxlIHwgbnVsbCA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG5cdGlmICghYWN0aXZlRmlsZSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cdGNvbnN0IGlubGlua3MgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoYWN0aXZlRmlsZSk/LmxpbmtzO1xyXG5cdHJldHVybiBpbmxpbmtzID8gT2JqZWN0LmtleXMoaW5saW5rcykubGVuZ3RoIDogMDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblx0cmV0dXJuIGNoYXJDb3VudDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzX3NpbmdsZShmaWxlX3BhdGg6IHN0cmluZywgdmF1bHRfcGF0aDogc3RyaW5nKTogbnVtYmVyIHtcclxuXHQvLyBHZXQgdGhlIGZpbGVuYW1lIGFuZCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUgd2UncmUgY291bnRpbmcgbGlua3MgdG9cclxuXHRjb25zdCBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZV9wYXRoKTtcclxuXHRjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZmlsZV9wYXRoKTtcclxuXHJcblx0Ly8gQ3JlYXRlIGEgc2V0IHRvIGhvbGQgYWxsIHRoZSBmaWxlcyB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3QgbGlua2luZ19maWxlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcblxyXG5cdC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgZmlsZXMgaW4gdGhlIHZhdWx0IGRpcmVjdG9yeSB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3Qgd2Fsa1N5bmMgPSAoZGlyOiBzdHJpbmcsIGZpbGVsaXN0OiBzdHJpbmdbXSkgPT4ge1xyXG5cdFx0Y29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpO1xyXG5cdFx0ZmlsZWxpc3QgPSBmaWxlbGlzdCB8fCBbXTtcclxuXHRcdGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRpZiAoZnMuc3RhdFN5bmMocGF0aC5qb2luKGRpciwgZmlsZSkpLmlzRGlyZWN0b3J5KCkpIHtcclxuXHRcdFx0XHRmaWxlbGlzdCA9IHdhbGtTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBmaWxlbGlzdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWdub3JlIG5vbi1tZCBmaWxlcyBhbmQgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGlmICghZmlsZS5lbmRzV2l0aChcIi5tZFwiKSB8fCBmaWxlID09PSBmaWxlbmFtZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmVhZCB0aGUgZmlsZSBhbmQgbG9vayBmb3IgbGlua3MgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcclxuXHRcdFx0XHRkYXRhLnNwbGl0KCdcXG4nKS5mb3JFYWNoKChsaW5lOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdGlmIChsaW5lLmluY2x1ZGVzKGBbWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1dYCkgfHwgbGluZS5pbmNsdWRlcyhgWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1gKSkge1xyXG5cdFx0XHRcdFx0XHQvLyBXZSBmb3VuZCBhIGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlIVxyXG5cdFx0XHRcdFx0XHRsaW5raW5nX2ZpbGVzLmFkZChwYXRoLnJlbGF0aXZlKGRpcmVjdG9yeSwgcGF0aC5qb2luKGRpciwgZmlsZSkpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gZmlsZWxpc3Q7XHJcblx0fTtcclxuXHJcblx0d2Fsa1N5bmModmF1bHRfcGF0aCwgW10pO1xyXG5cclxuXHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBhcmUgbWVudGlvbmluZyB0aGUgaW5wdXQgZmlsZVxyXG5cdHJldHVybiBsaW5raW5nX2ZpbGVzLnNpemU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rcyhmaWxlOiBURmlsZSk6IG51bWJlciB7XHJcbiAgICBjb25zdCB7IGFwcDogeyBtZXRhZGF0YUNhY2hlOiB7IHJlc29sdmVkTGlua3MgfSB9IH0gPSB0aGlzO1xyXG4gICAgY29uc3QgeyBwYXRoIH0gPSBmaWxlO1xyXG5cclxuICAgIGNvbnN0IHN1bUlubGlua3MgPSBPYmplY3QudmFsdWVzKHJlc29sdmVkTGlua3MpXHJcbiAgICAgICAgLm1hcCgodmFsOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9KSA9PiB2YWxbcGF0aF0gPz8gMClcclxuICAgICAgICAucmVkdWNlKChsZWZ0LCByaWdodCkgPT4gbGVmdCArIHJpZ2h0LCAwKTtcclxuXHJcbiAgICByZXR1cm4gc3VtSW5saW5rcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlQ291bnRNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+PiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHRcclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdFxyXG5cclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHRcclxuICAgIGNvbnN0IGZpbGVDb3VudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHJcblx0XHRjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG4gICAgICAgIH1cclxuXHRcdFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWxlQ291bnRNYXA7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxURmlsZVtdPiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkU3Vic3RyaW5nczogJHtleGNsdWRlZFN1YnN0cmluZ3N9YClcclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZEZvbGRlcnM6ICR7ZXhjbHVkZWRGb2xkZXJzfWApXHRcclxuICAgIGxldCBmaWxlQXJyYXk6IFRGaWxlW10gPSBbXTtcclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgZmlsZS5wYXRoOiAke2ZpbGUucGF0aH1gKVxyXG5cdFx0aWYgKCghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSB8fCBleGNsdWRlVGFnLmxlbmd0aCA9PT0gMCkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGUgJHtmaWxlfSBnZXQncyBhZGRlZC5gKVxyXG5cdFx0XHRmaWxlQXJyYXkucHVzaChmaWxlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaWxlQXJyYXk7XHJcbn07XHJcbiIsICJpbXBvcnQge1RGaWxlfSBmcm9tICdvYnNpZGlhbic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0Q3JlYXRlZEZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RDcmVhdGVkRmlsZTtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RNb2RpZmllZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RNb2RpZmllZEZpbGUuc3RhdC5tdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdE1vZGlmaWVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdE1vZGlmaWVkRmlsZTtcclxufSAgXHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdERhdGVGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdENyZWF0ZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5jdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vbnRoc0JldHdlZW4oc3RhcnRNb250aDogRGF0ZSwgZW5kTW9udGg6IERhdGUpOiBudW1iZXIge1xyXG5cdGxldCBtb250aHMgPSAoZW5kTW9udGguZ2V0TW9udGgoKSAtIHN0YXJ0TW9udGguZ2V0TW9udGgoKSkgKyAxO1xyXG5cdGlmIChlbmRNb250aC5nZXRGdWxsWWVhcigpID4gc3RhcnRNb250aC5nZXRGdWxsWWVhcigpKSB7XHJcblx0XHRtb250aHMgKz0gKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgLSBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpKjEyO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9udGhzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQuY3RpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQubXRpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhcnRGb3JtYXQoeV9heGlzOiBzdHJpbmcsIGNvdW50c1N0cmluZ01vZDogc3RyaW5nLCBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCBtb25hdHNiZWdyZW56dW5nID0gbnVsbFxyXG5cdGlmIChjaGFydFJlZHV6aWVydW5nTW9uYXRlID09IDApe1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IDBcclxuXHR9IGVsc2Uge1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IGNvdW50c1N0cmluZ01vZC5zcGxpdCgnLCcpLmxlbmd0aCAtIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHR9XHJcblx0XHJcblx0Ly9jb25zdCBtb25hdHNiZWdyZW56dW5nID0gbGVuZ3RoY291bnRzU3RyaW5nQ3JlYXRlIC0gdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlXHJcblx0cmV0dXJuIFwiYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtcIiArIHlfYXhpcyArIFwiXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IG1vZGlmaWVkXFxuICAgIGRhdGE6IFtcIiArIGNvdW50c1N0cmluZ01vZCArIFwiXVxcbnRlbnNpb246IDAuMlxcbndpZHRoOiA4MCAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG55VGl0bGU6IFxcXCJOdW1iZXIgb2YgTm90ZXNcXFwiXFxueFRpdGxlOiBcXFwiTW9udGhzXFxcIlxcbnhNaW46IFwiICsgbW9uYXRzYmVncmVuenVuZyArIFwiXFxuYGBgXCI7XHJcbn1cclxuXHJcbiAgXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQ2hhcnRDb250ZW50IChhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBuZXdDb250ZW50OiBzdHJpbmcpIHtcclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRpZiAobGluZSA9PT0gXCJeQ2hhcnRNb250aFwiKSB7XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmIChyZWZlcmVuY2UgIT0gbnVsbCl7XHJcblx0XHRlbmQgPSByZWZlcmVuY2U7XHJcblx0XHRzdGFydCA9IHJlZmVyZW5jZSAtIDE5O1xyXG5cdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdDb250ZW50LCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIGxldmVsOiBzdHJpbmc7XHJcbiAgfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSWZSZWNlaXZlQUJhZGdlKGxldmVsT2xkOiBudW1iZXIsIGxldmVsTmV3OiBudW1iZXIpOiBib29sZWFuIHtcclxuICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgbGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcbiAgZm9yIChsZXQgaT0wOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspe1xyXG4gICAgaWYgKGxldmVsT2xkIDwgYmFkZ2VMZXZlbHNbaV0gJiYgbGV2ZWxOZXcgPj0gYmFkZ2VMZXZlbHNbaV0pe1xyXG4gICAgICByZWNlaXZlQmFkZ2UgPSB0cnVlXHJcbiAgICB9IFxyXG4gIH1cclxuICByZXR1cm4gcmVjZWl2ZUJhZGdlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIsIGluZm9ybTogYm9vbGVhbik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiLCBsZXZlbDogXCJsZXZlbCA1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgLCBsZXZlbDogXCJsZXZlbCAyMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZSBPd2wgR3VydVwiLCBkZXNjcmlwdGlvbjogXCJXaG9vLWhvbyEgWW91J3ZlIGFjaGlldmVkICdXaXNlIE93bCBHdXJ1JyBzdGF0dXMuIFlvdXIgd2lzZG9tIGlzIGxlZ2VuZGFyeSwgYW5kIHlvdXIgaG9vdHMgb2Yga25vd2xlZGdlIGVjaG8gdGhyb3VnaCB0aGUgZm9yZXN0IG9mIGlnbm9yYW5jZSFcIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVpbnN0ZWluIEluY2FybmF0ZVwiLCBkZXNjcmlwdGlvbjogXCJFdXJla2EhIFlvdSd2ZSBiZWNvbWUgYW4gJ0VpbnN0ZWluIEluY2FybmF0ZSwnIHB1c2hpbmcgdGhlIGJvdW5kYXJpZXMgb2YgdW5kZXJzdGFuZGluZyBhbmQgYmVuZGluZyB0aGUgZmFicmljIG9mIGtub3dsZWRnZSB0byB5b3VyIHdpbGwhXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJNYXN0ZXJtaW5kIFNhZ2VcIiwgZGVzY3JpcHRpb246IFwiTWFnbmlmaWNlbnQhIFlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgcmFuayBvZiAnTWFzdGVybWluZCBTYWdlLCcgZ3VpZGluZyB0aGUgcml2ZXJzIG9mIGluZm9ybWF0aW9uIGFuZCBlbmxpZ2h0ZW5pbmcgYWxsIHdobyBzZWVrIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNlcmVicmFsIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQnJhdmlzc2ltbyEgWW91J3JlIG5vdyBhICdDZXJlYnJhbCBNYWVzdHJvLCcgY29uZHVjdGluZyB0aGUgc3ltcGhvbnkgb2Yga25vd2xlZGdlIHdpdGggdGhlIGZpbmVzc2Ugb2YgYSB2aXJ0dW9zbyBjb25kdWN0b3IhXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJaZW4gS25vd2xlZGdlIEtlZXBlclwiLCBkZXNjcmlwdGlvbjogXCJTZXJlbml0eSBhY2hpZXZlZCEgQXMgYSAnWmVuIEtub3dsZWRnZSBLZWVwZXIsJyB5b3UgbWFpbnRhaW4gYSB0cmFucXVpbCBtaW5kIHdoaWxlIG1hbmFnaW5nIHZhc3QgcG9vbHMgb2Yga25vd2xlZGdlIHdpdGggZ3JhY2UgYW5kIHBvaXNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkXCIsIGRlc2NyaXB0aW9uOiBcIkFsbCBoYWlsIHRoZSAnR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkIScgWW91IHdpZWxkIHRoZSBrbm93bGVkZ2Ugb2YgYWdlcyBhbmQgaG9sZCB0aGUga2V5cyB0byB1bmxvY2sgdGhlIGdhdGVzIG9mIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nXCIsIGRlc2NyaXB0aW9uOiBcIkNvbmdyYXR1bGF0aW9ucywgb2ggd2lzZSBvbmUhIFlvdSd2ZSBhdHRhaW5lZCB0aGUgaGlnaGVzdCBsZXZlbCBvZiBlbmxpZ2h0ZW5tZW50IGFzIHRoZSAnT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcuJyBZb3VyIHVuZGVyc3RhbmRpbmcga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciB3aXNkb20gaXMgYXMgdmFzdCBhcyB0aGUgY29zbW9zIGl0c2VsZiFcIiwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc1tpbmRleF1cclxuICB9XHJcbiAgXHJcblxyXG5cclxuICBleHBvcnQgIGZ1bmN0aW9uIGdldEJhZGdlRm9ySW5pdExldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbMCwgMywgNywgMTUsIDIzLCAzMCwgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzSW5pdDogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgU2Vla2VyIEluaXRpYXRlXCIsIGRlc2NyaXB0aW9uOiBcIldlbGNvbWUgdG8gdGhlIGpvdXJuZXkgb2Yga25vd2xlZGdlISBBcyBhICdMb3JlIFNlZWtlciBJbml0aWF0ZSwnIHlvdSd2ZSB0YWtlbiB5b3VyIGZpcnN0IHN0ZXBzIGludG8gdGhlIHdvcmxkIG9mIG9yZ2FuaXplZCB3aXNkb20uIFlvdXIgcXVlc3QgaGFzIGp1c3QgYmVndW4sIGFuZCB3aXRoIGVhY2ggbm90ZSB5b3UgbWFrZSwgeW91IGxheSB0aGUgZm91bmRhdGlvbiBmb3IgYSBmdXR1cmUgcmljaCB3aXRoIGluc2lnaHRzIGFuZCB1bmRlcnN0YW5kaW5nLiBZb3VyIGpvdXJuZXkgc3RhcnRzIGhlcmUsIGFuZCB0aGUgcGF0aCBhaGVhZCBpcyBmaWxsZWQgd2l0aCBwb3RlbnRpYWwgYW5kIGRpc2NvdmVyeS5cIiwgbGV2ZWw6IFwibGV2ZWwgMVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEFwcHJlbnRpY2VcIiwgZGVzY3JpcHRpb246IFwiWW91J3ZlIGhpdCB0aGUgZ3JvdW5kIHJ1bm5pbmcgd2l0aCB5b3VyIGV4aXN0aW5nIGtub3dsZWRnZSB0cmVhc3VyZXMhIFlvdSdyZSBhbHJlYWR5IGFuICdMb3JlIEFwcHJlbnRpY2UsJyBhcm1lZCB3aXRoIGEgd2VhbHRoIG9mIHdpc2RvbSBhbmQgcmVhZHkgdG8gc2hhcGUgaXQgZnVydGhlci5cIiwgbGV2ZWw6IFwibGV2ZWwgM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYXZ2eSBTY2hvbGFyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBnaXZlbiB5b3UgYSBoZWFkIHN0YXJ0ISBZb3UncmUgbm93IGEgJ1NhdnZ5IFNjaG9sYXIsJyBjb25maWRlbnRseSBkaXZpbmcgaW50byB0aGUgc2VhIG9mIGluZm9ybWF0aW9uIHdpdGggYSB0cmVhc3VyZSB0cm92ZSBvZiBpbnNpZ2h0cy5cIiAsIGxldmVsOiBcImxldmVsIDdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2FnZSdzIEZvdW5kYXRpb25cIiwgZGVzY3JpcHRpb246IFwiQnVpbGRpbmcgdXBvbiB5b3VyIHByZS1leGlzdGluZyBub3RlcywgeW91J3JlIGVzdGFibGlzaGluZyB0aGUgJ1NhZ2UncyBGb3VuZGF0aW9uJyBmb3IgYW4gZXZlbiBncmFuZGVyIGVkaWZpY2Ugb2Yga25vd2xlZGdlLiBZb3VyIGdyb3VuZHdvcmsgaXMgaW1wcmVzc2l2ZSFcIiAsIGxldmVsOiBcImxldmVsIDE1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2RvbSBTZWVkbGluZ1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbnVydHVyZWQgdGhlIGdyb3d0aCBvZiBhICdXaXNkb20gU2VlZGxpbmcuJyBZb3UncmUgY3VsdGl2YXRpbmcgeW91ciBnYXJkZW4gb2Yga25vd2xlZGdlIHdpdGggY2FyZSBhbmQgcGF0aWVuY2UuXCIgLCBsZXZlbDogXCJsZXZlbCAyM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJQcm9kaWdpb3VzIFByZXBhcmVyXCIsIGRlc2NyaXB0aW9uOiBcIlRoYW5rcyB0byB5b3VyIHByaW9yIGVmZm9ydHMsIHlvdSdyZSBhICdQcm9kaWdpb3VzIFByZXBhcmVyLCcgc3RhbmRpbmcgdGFsbCBhbW9uZyB5b3VyIG5vdGVzIGFuZCByZWFkeSB0byBjb25xdWVyIG5ldyByZWFsbXMgb2YgdW5kZXJzdGFuZGluZy5cIiAsIGxldmVsOiBcImxldmVsIDMwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVwaWMgRXBpcGhhbnkgRXhwbG9yZXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBwYXN0IG5vdGVzIGhhdmUgbGVkIHlvdSB0byB0aGUgZ3JhbmQgJ0VwaWMgRXBpcGhhbnkgRXhwbG9yZXInIHN0YXR1cyEgWW91J3ZlIGFscmVhZHkgYmVlbiBkb3duIGEgZmV3IHJhYmJpdCBob2xlcyBhbmQgY29tZSBvdXQgd2l0aCBkYXp6bGluZyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgTHVtaW5hcnlcIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIGlsbHVtaW5hdGluZyB5b3VyIHBhdGgsIHlvdSd2ZSBiZWNvbWUgYSAnTG9yZSBMdW1pbmFyeSwnIHNoaW5pbmcgbGlnaHQgb24gdGhlIG15c3RlcmllcyBvZiB0aGUgdW5pdmVyc2UsIG9uZSBpZGVhIGF0IGEgdGltZS5cIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjcmliZSBvZiB0aGUgQW5jaWVudHNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBtYXN0ZXJ5IG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYW5hZ2VtZW50IGhhcyBlbGV2YXRlZCB5b3UgdG8gdGhlIGVzdGVlbWVkIHJhbmsgb2YgdGhlICdTY3JpYmUgb2YgdGhlIEFuY2llbnRzLicgWW91ciBleGlzdGluZyBub3RlcyBoYXZlIHRyYW5zZm9ybWVkIGludG8gdHJlYXN1cmVzLCBicmlkZ2luZyB0aGUgZ2FwIGJldHdlZW4gb2xkIHdpc2RvbSBhbmQgbmV3IGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXVyZWthIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQXJtZWQgd2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzLCB5b3UncmUgdGhlICdFdXJla2EgTWFlc3RybywnIGNvbXBvc2luZyBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHdpdGggdGhlIG1lbG9keSBvZiBkaXNjb3ZlcnkuXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDaHJvbmljbGVzIENoYW1waW9uXCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBzdGFuZGluZyBhcyBhIHRlc3RhbWVudCwgeW91J3ZlIGFzY2VuZGVkIHRvIHRoZSBpbGx1c3RyaW91cyAnQ2hyb25pY2xlcyBDaGFtcGlvbicgbGV2ZWwuIFlvdXIgam91cm5leSB0aHJvdWdoIHRpbWUncyB0YXBlc3RyeSBoYXMgYnJvdWdodCBmb3J0aCBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHBhc3QgYW5kIHByZXNlbnQuXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXJcIiwgZGVzY3JpcHRpb246IFwiQXMgJ1RoZSBDdXJpb3VzIENhcnRvZ3JhcGhlciwnIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYXBwZWQgb3V0IHVuY2hhcnRlZCB0ZXJyaXRvcmllcyBvZiB1bmRlcnN0YW5kaW5nLiBZb3VyIGN1cmlvc2l0eSBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIG5vdGVzIGFyZSB0aGUgY29tcGFzcyBndWlkaW5nIHlvdXIgZXhwbG9yYXRpb24uXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTdWx0YW4gb2YgU3ludGhlc2lzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYWRlIHlvdSB0aGUgJ1N1bHRhbiBvZiBTeW50aGVzaXMuJyBZb3UncmUgdGhlIG1hc3RlciB3ZWF2ZXIsIHRocmVhZGluZyB0b2dldGhlciB0aHJlYWRzIG9mIGluZm9ybWF0aW9uIGludG8gYSByaWNoIHRhcGVzdHJ5IG9mIGluc2lnaHQuXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdGVybmFsIEFyY2hpdmlzdFwiLCBkZXNjcmlwdGlvbjogXCJBdCB0aGUgcGlubmFjbGUgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hc3RlcnksIHlvdSdyZSBub3cgcmV2ZXJlZCBhcyB0aGUgJ0V0ZXJuYWwgQXJjaGl2aXN0LicgWW91ciBleGlzdGluZyBub3RlcywgY2FyZWZ1bGx5IGN1cmF0ZWQgYW5kIG51cnR1cmVkLCBzdGFuZCBhcyBpbW1vcnRhbCBiZWFjb25zLCBndWlkaW5nIHNlZWtlcnMgdGhyb3VnaCB0aGUgbGFieXJpbnRoIG9mIGtub3dsZWRnZSBhY3Jvc3MgYWdlcy5cIiAsIGxldmVsOiBcImxldmVsIDEwMFwiIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc0luaXRbaW5kZXhdXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRXhhbXBsZSB1c2FnZTpcclxuICAvLyBjb25zdCBjdXJyZW50TGV2ZWwgPSA0MjsgLy8gUmVwbGFjZSB0aGlzIHdpdGggdGhlIGFjdHVhbCBwbGF5ZXIncyBsZXZlbFxyXG4gIC8vIGNvbnN0IGJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChjdXJyZW50TGV2ZWwpO1xyXG4gIC8vIGNvbnNvbGUubG9nKGBDb25ncmF0dWxhdGlvbnMhIFlvdSd2ZSByZWFjaGVkIExldmVsICR7Y3VycmVudExldmVsfS4gWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YCk7XHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4gICAgLypcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiIH0sXHJcbiAgICAgIC8vIEFkZCBtb3JlIGJhZGdlcyBoZXJlIGZvciBsZXZlbHMgNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIGFuZCAxMDBcclxuICAgICAgLy8gRXhhbXBsZTpcclxuICAgICAgLy8geyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgfSxcclxuICAgICAgLy8geyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiB9LFxyXG4gICAgICAvLyAuLi5hbmQgc28gb25cclxuICAgIF07XHJcbiAgXHJcbiAgICBjb25zdCBtYXhMZXZlbCA9MTAwOyAvLyBBc3N1bWluZyBlYWNoIGJhZGdlIGlzIGF3YXJkZWQgZXZlcnkgNSBsZXZlbHNcclxuICAgIGNvbnN0IGNhcHBlZExldmVsID0gTWF0aC5taW4obGV2ZWwsIG1heExldmVsKTtcclxuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihjYXBwZWRMZXZlbCAvIDUpIC0gMTtcclxuICAgIHJldHVybiBiYWRnZXNbaW5kZXhdO1xyXG4gIH1cclxuICBcclxuXHJcbiAgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgfVxyXG4gICovXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIExldmVsRGF0YSB7XHJcbiAgICBwb2ludHM6IG51bWJlcjtcclxuICAgIGxldmVsOiBudW1iZXI7XHJcbiAgICBwb2ludHNOZXh0OiBudW1iZXI7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbnN0IGxldmVsRGF0YTogTGV2ZWxEYXRhW10gPSBbXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDAsIHBvaW50c05leHQ6IDB9LFxyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAxLCBwb2ludHNOZXh0OiAxMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMCwgbGV2ZWw6IDIsIHBvaW50c05leHQ6IDMwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwLCBsZXZlbDogMywgcG9pbnRzTmV4dDogNzUwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAsIGxldmVsOiA0LCBwb2ludHNOZXh0OiAxNTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MDAwLCBsZXZlbDogNSwgcG9pbnRzTmV4dDogMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMCwgbGV2ZWw6IDYsIHBvaW50c05leHQ6IDUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTAwMDAsIGxldmVsOiA3LCBwb2ludHNOZXh0OiA4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgwMDAwLCBsZXZlbDogOCwgcG9pbnRzTmV4dDogMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIwMDAwLCBsZXZlbDogOSwgcG9pbnRzTmV4dDogMTcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTcwMDAwLCBsZXZlbDogMTAsIHBvaW50c05leHQ6IDIzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMDAwMCwgbGV2ZWw6IDExLCBwb2ludHNOZXh0OiAzMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAsIGxldmVsOiAxMiwgcG9pbnRzTmV4dDogMzgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzgwMDAwLCBsZXZlbDogMTMsIHBvaW50c05leHQ6IDQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3MDAwMCwgbGV2ZWw6IDE0LCBwb2ludHNOZXh0OiA2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDAwMDAsIGxldmVsOiAxNSwgcG9pbnRzTmV4dDogNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMDAwLCBsZXZlbDogMTYsIHBvaW50c05leHQ6IDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMDAwMCwgbGV2ZWw6IDE3LCBwb2ludHNOZXh0OiAxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTExMDAwMCwgbGV2ZWw6IDE4LCBwb2ludHNOZXh0OiAxMzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMyMDAwMCwgbGV2ZWw6IDE5LCBwb2ludHNOZXh0OiAxNTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTU1MDAwMCwgbGV2ZWw6IDIwLCBwb2ludHNOZXh0OiAxODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTgwMDAwMCwgbGV2ZWw6IDIxLCBwb2ludHNOZXh0OiAyMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjA3MDAwMCwgbGV2ZWw6IDIyLCBwb2ludHNOZXh0OiAyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjM2MDAwMCwgbGV2ZWw6IDIzLCBwb2ludHNOZXh0OiAyNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjY3MDAwMCwgbGV2ZWw6IDI0LCBwb2ludHNOZXh0OiAzMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwMCwgbGV2ZWw6IDI1LCBwb2ludHNOZXh0OiAzMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM1MDAwMCwgbGV2ZWw6IDI2LCBwb2ludHNOZXh0OiAzNzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzcyMDAwMCwgbGV2ZWw6IDI3LCBwb2ludHNOZXh0OiA0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDExMDAwMCwgbGV2ZWw6IDI4LCBwb2ludHNOZXh0OiA0NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUyMDAwMCwgbGV2ZWw6IDI5LCBwb2ludHNOZXh0OiA0OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDk1MDAwMCwgbGV2ZWw6IDMwLCBwb2ludHNOZXh0OiA1NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQwMDAwMCwgbGV2ZWw6IDMxLCBwb2ludHNOZXh0OiA1ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTg3MDAwMCwgbGV2ZWw6IDMyLCBwb2ludHNOZXh0OiA2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjM2MDAwMCwgbGV2ZWw6IDMzLCBwb2ludHNOZXh0OiA2ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjg3MDAwMCwgbGV2ZWw6IDM0LCBwb2ludHNOZXh0OiA3NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwMDAwMCwgbGV2ZWw6IDM1LCBwb2ludHNOZXh0OiA3OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzk1MDAwMCwgbGV2ZWw6IDM2LCBwb2ludHNOZXh0OiA4NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODUyMDAwMCwgbGV2ZWw6IDM3LCBwb2ludHNOZXh0OiA5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTExMDAwMCwgbGV2ZWw6IDM4LCBwb2ludHNOZXh0OiA5NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTcyMDAwMCwgbGV2ZWw6IDM5LCBwb2ludHNOZXh0OiAxMDM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMzUwMDAwLCBsZXZlbDogNDAsIHBvaW50c05leHQ6IDExMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTEwMDAwMDAsIGxldmVsOiA0MSwgcG9pbnRzTmV4dDogMTE2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTY3MDAwMCwgbGV2ZWw6IDQyLCBwb2ludHNOZXh0OiAxMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMzYwMDAwLCBsZXZlbDogNDMsIHBvaW50c05leHQ6IDEzMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMwNzAwMDAsIGxldmVsOiA0NCwgcG9pbnRzTmV4dDogMTM4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzgwMDAwMCwgbGV2ZWw6IDQ1LCBwb2ludHNOZXh0OiAxNDU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE0NTUwMDAwLCBsZXZlbDogNDYsIHBvaW50c05leHQ6IDE1MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUzMjAwMDAsIGxldmVsOiA0NywgcG9pbnRzTmV4dDogMTYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjExMDAwMCwgbGV2ZWw6IDQ4LCBwb2ludHNOZXh0OiAxNjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2OTIwMDAwLCBsZXZlbDogNDksIHBvaW50c05leHQ6IDE3NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTc3NTAwMDAsIGxldmVsOiA1MCwgcG9pbnRzTmV4dDogMTg2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODYwMDAwMCwgbGV2ZWw6IDUxLCBwb2ludHNOZXh0OiAxOTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE5NDcwMDAwLCBsZXZlbDogNTIsIHBvaW50c05leHQ6IDIwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjAzNjAwMDAsIGxldmVsOiA1MywgcG9pbnRzTmV4dDogMjEyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMTI3MDAwMCwgbGV2ZWw6IDU0LCBwb2ludHNOZXh0OiAyMjIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIyMjAwMDAwLCBsZXZlbDogNTUsIHBvaW50c05leHQ6IDIzMTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMxNTAwMDAsIGxldmVsOiA1NiwgcG9pbnRzTmV4dDogMjQxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNDEyMDAwMCwgbGV2ZWw6IDU3LCBwb2ludHNOZXh0OiAyNTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI1MTEwMDAwLCBsZXZlbDogNTgsIHBvaW50c05leHQ6IDI2MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjYxMjAwMDAsIGxldmVsOiA1OSwgcG9pbnRzTmV4dDogMjcxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNzE1MDAwMCwgbGV2ZWw6IDYwLCBwb2ludHNOZXh0OiAyODIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI4MjAwMDAwLCBsZXZlbDogNjEsIHBvaW50c05leHQ6IDI5MjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjkyNzAwMDAsIGxldmVsOiA2MiwgcG9pbnRzTmV4dDogMzAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDM2MDAwMCwgbGV2ZWw6IDYzLCBwb2ludHNOZXh0OiAzMTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMxNDcwMDAwLCBsZXZlbDogNjQsIHBvaW50c05leHQ6IDMyNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzI2MDAwMDAsIGxldmVsOiA2NSwgcG9pbnRzTmV4dDogMzM3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzc1MDAwMCwgbGV2ZWw6IDY2LCBwb2ludHNOZXh0OiAzNDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM0OTIwMDAwLCBsZXZlbDogNjcsIHBvaW50c05leHQ6IDM2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzYxMTAwMDAsIGxldmVsOiA2OCwgcG9pbnRzTmV4dDogMzczMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzMyMDAwMCwgbGV2ZWw6IDY5LCBwb2ludHNOZXh0OiAzODU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4NTUwMDAwLCBsZXZlbDogNzAsIHBvaW50c05leHQ6IDM5ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzk4MDAwMDAsIGxldmVsOiA3MSwgcG9pbnRzTmV4dDogNDEwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTA3MDAwMCwgbGV2ZWw6IDcyLCBwb2ludHNOZXh0OiA0MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQyMzYwMDAwLCBsZXZlbDogNzMsIHBvaW50c05leHQ6IDQzNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDM2NzAwMDAsIGxldmVsOiA3NCwgcG9pbnRzTmV4dDogNDUwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTAwMDAwMCwgbGV2ZWw6IDc1LCBwb2ludHNOZXh0OiA0NjM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ2MzUwMDAwLCBsZXZlbDogNzYsIHBvaW50c05leHQ6IDQ3NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDc3MjAwMDAsIGxldmVsOiA3NywgcG9pbnRzTmV4dDogNDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTExMDAwMCwgbGV2ZWw6IDc4LCBwb2ludHNOZXh0OiA1MDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwNTIwMDAwLCBsZXZlbDogNzksIHBvaW50c05leHQ6IDUxOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTE5NTAwMDAsIGxldmVsOiA4MCwgcG9pbnRzTmV4dDogNTM0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MzQwMDAwMCwgbGV2ZWw6IDgxLCBwb2ludHNOZXh0OiA1NDg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0ODcwMDAwLCBsZXZlbDogODIsIHBvaW50c05leHQ6IDU2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTYzNjAwMDAsIGxldmVsOiA4MywgcG9pbnRzTmV4dDogNTc4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1Nzg3MDAwMCwgbGV2ZWw6IDg0LCBwb2ludHNOZXh0OiA1OTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU5NDAwMDAwLCBsZXZlbDogODUsIHBvaW50c05leHQ6IDYwOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjA5NTAwMDAsIGxldmVsOiA4NiwgcG9pbnRzTmV4dDogNjI1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MjUyMDAwMCwgbGV2ZWw6IDg3LCBwb2ludHNOZXh0OiA2NDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY0MTEwMDAwLCBsZXZlbDogODgsIHBvaW50c05leHQ6IDY1NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjU3MjAwMDAsIGxldmVsOiA4OSwgcG9pbnRzTmV4dDogNjczNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NzM1MDAwMCwgbGV2ZWw6IDkwLCBwb2ludHNOZXh0OiA2OTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY5MDAwMDAwLCBsZXZlbDogOTEsIHBvaW50c05leHQ6IDcwNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzA2NzAwMDAsIGxldmVsOiA5MiwgcG9pbnRzTmV4dDogNzIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MjM2MDAwMCwgbGV2ZWw6IDkzLCBwb2ludHNOZXh0OiA3NDA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDcwMDAwLCBsZXZlbDogOTQsIHBvaW50c05leHQ6IDc1ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzU4MDAwMDAsIGxldmVsOiA5NSwgcG9pbnRzTmV4dDogNzc1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NzU1MDAwMCwgbGV2ZWw6IDk2LCBwb2ludHNOZXh0OiA3OTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5MzIwMDAwLCBsZXZlbDogOTcsIHBvaW50c05leHQ6IDgxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODExMTAwMDAsIGxldmVsOiA5OCwgcG9pbnRzTmV4dDogODI5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MjkyMDAwMCwgbGV2ZWw6IDk5LCBwb2ludHNOZXh0OiA4NDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg0NzUwMDAwLCBsZXZlbDogMTAwLCBwb2ludHNOZXh0OiA4NjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg2NjAwMDAwLCBsZXZlbDogMTAxLCBwb2ludHNOZXh0OiA4ODQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg4NDcwMDAwLCBsZXZlbDogMTAyLCBwb2ludHNOZXh0OiA5MDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkwMzYwMDAwLCBsZXZlbDogMTAzLCBwb2ludHNOZXh0OiA5MjI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMjcwMDAwLCBsZXZlbDogMTA0LCBwb2ludHNOZXh0OiA5NDIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk0MjAwMDAwLCBsZXZlbDogMTA1LCBwb2ludHNOZXh0OiA5NjE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk2MTUwMDAwLCBsZXZlbDogMTA2LCBwb2ludHNOZXh0OiA5ODEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk4MTIwMDAwLCBsZXZlbDogMTA3LCBwb2ludHNOZXh0OiAxMDAxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAxMTAwMDAsIGxldmVsOiAxMDgsIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMjEyMDAwMCwgbGV2ZWw6IDEwOSwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTA0MTUwMDAwLCBsZXZlbDogMTEwLCBwb2ludHNOZXh0OiAxMDYxNTAwMDAgfSxcclxuICBdO1xyXG4gIFxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRMZXZlbEZvclBvaW50cyhwb2ludHM6IG51bWJlcik6IExldmVsRGF0YSB7XHJcbiAgICBsZXQgbGV2ZWwgOkxldmVsRGF0YSA9IGxldmVsRGF0YVswXTtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHBvaW50cyA+PSBkYXRhLnBvaW50cykge1xyXG4gICAgICAgIGxldmVsID0gZGF0YTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxldmVsO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c1BvaW50c0ZvckxldmVsKHRhcmdldExldmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHN0YXR1c1BvaW50cyA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmICh0YXJnZXRMZXZlbCA9PSBkYXRhLmxldmVsICYmIHN0YXR1c1BvaW50cyA9PSAwKSB7XHJcbiAgICAgICAgc3RhdHVzUG9pbnRzID0gZGF0YS5wb2ludHM7XHJcbiAgICAgIH0gXHJcbiAgICB9XHJcblxyXG5cdFx0XHJcblx0XHRyZXR1cm4gc3RhdHVzUG9pbnRzXHJcbiAgfVxyXG4gIFxyXG5cclxuLypcclxuY29uc3QgcG9pbnRzID0gNTUwMDtcclxuY29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhwb2ludHMpO1xyXG5jb25zb2xlLmxvZyhgV2l0aCAke3BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsfS5gKTtcclxuKi8iLCAiY29uc3QgbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2U6IHN0cmluZ1tdID0gW1xyXG5cdFwiU2V2ZW4gZGF5cyBvZiBub3RlLXRha2luZz8gWW91J3JlIHByYWN0aWNhbGx5IGEgbm90ZSBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBmaWVzdGEhIFx1RDgzQ1x1REY4OVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBwYXJ0eSBnb2luZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0gWW91J3JlIGxpa2UgdGhlIEphbWVzIEJvbmQgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REQ3Nlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzZWNyZXQgYWdlbnQhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhICdOb3RlLUEtRGF5JyBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXBlcyBvcHRpb25hbCFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3ZlIHByYWN0aWNhbGx5IHdyaXR0ZW4gYSBtaW5pIG5vdmVsIGJ5IG5vdyEgXHVEODNEXHVEQ0RBXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGF1dGhvciBzdGF0dXMgYWNoaWV2ZWQhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFVzYWluIEJvbHQgb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzcHJpbnRpbmcgdG93YXJkcyBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc3ByZWUhIEl0J3MgbGlrZSBhIG5vdGVzLXBsb3Npb24hIFx1RDgzRFx1RENBNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBmaXJld29ya3MgY29taW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYmFzaWNhbGx5IHRoZSBNaWNoYWVsIEpvcmRhbiBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNsYW0gZHVuayFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNVlAhIFx1RDgzQ1x1REZDNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNjb3JpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgJ1NldmVuIERheSBOb3RlIEZldmVyJyBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhdGNoIHRoZSBmZXZlciFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGphbW1pbichXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgbWFnaWMgc2hvdyEgTm93IHlvdSBzZWUgdGhlIG5vdGVzLCBub3cgeW91IGRvbid0ISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cywga2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBsaWtlIGEgbm90ZS10YWtpbmcgSmVkaSBNYXN0ZXIhIFx1RDgzQ1x1REYwQ1x1MjY5NFx1RkUwRiBbWF0gcG9pbnRzLCBtYXkgdGhlIG5vdGVzIGJlIHdpdGggeW91IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNYWNHeXZlciwgdHVybmluZyBpbmZvcm1hdGlvbiBpbnRvIHNvbHV0aW9ucyEgXHVEODNEXHVERDI3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY3JhZnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBjaGVmLCBjb29raW5nIHVwIGEga25vd2xlZGdlIGZlYXN0ISBcdUQ4M0NcdURGNzNcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjb29raW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQwXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTGV3aXMgYW5kIENsYXJrLCBjaGFydGluZyBuZXcgdGVycml0b3JpZXMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURERkFcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGRldGVjdGl2ZSwgc29sdmluZyBjYXNlcyBvZiBjdXJpb3NpdHkhIFx1RDgzRFx1REQ3NVx1RkUwRlx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGRldGVjdGluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHBpb25lZXIsIGJsYXppbmcgdHJhaWxzIHRocm91Z2ggdGhlIGZvcmVzdHMgb2YgaW5mb3JtYXRpb24hIFx1RDgzQ1x1REYzMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBpb25lZXJpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCJcclxuXTtcclxuXHJcbmNvbnN0IHR3b05vdGVNZXNzYWdlczogc3RyaW5nW10gPSBbXHJcblx0XCJCb29tISBZb3UganVzdCBhY2VkIHRoZSAyLW5vdGUgdGFuZ28hIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgZ3Jvb3ZpbichXCIsXHJcblx0XCJUd28gbm90ZXMgaW4gYSBkYXk/IFlvdSdyZSBvZmZpY2lhbGx5IGEgTm90ZSBOaW5qYSEgXHVEODNFXHVERDRCIFtYXSBwb2ludHMgZWFybmVkLiBSb2NrIG9uIVwiLFxyXG5cdFwiSGlnaC1maXZlISBZb3UndmUgY29ucXVlcmVkIHRoZSAyLW5vdGUgcm9kZW8hIFx1RDgzRVx1REQyMCBbWF0gcG9pbnRzIGVhcm5lZC4gWWVlaGF3IVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUhIFR3byBub3RlcyBpbiBvbmUgZGF5LCB5b3UgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgVHdvIG5vdGVzIGluIGEgZGF5IC0gd2hhdCdzIHlvdXIgc2VjcmV0IHdlYXBvbj8gXHVEODNEXHVERDI1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJLYWJvb20hIFlvdSBqdXN0IGJsZXcgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSB3YXRlciEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhIDItbm90ZSBzdXBlcnN0YXIhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGluIHRoZSBiYWcuIEtlZXAgc2hpbmluZyFcIixcclxuXHRcIkRvdWJsZSB1cCwgZG91YmxlIGRvd24hIFR3byBub3RlcyBpbiBvbmUgZGF5IC0geW91J3JlIGEgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgcGFydHkhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiS2EtY2hpbmchIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIHJhY2tpbmcgdXAgdGhvc2UgcG9pbnRzISBcdUQ4M0RcdURDQjAgW1hdIGVhcm5lZCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWdpY2lhbiEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHRyaWNrP1wiLFxyXG5cdFwiVHdvIG5vdGVzPyBOYWlsZWQgaXQhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCBnb2luZyFcIixcclxuXHRcIkFicmEtY2FkYWJyYSEgVHdvIG5vdGVzIGFwcGVhciEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlLCBkb3VibGUgdGhlIGZ1biEgVHdvIG5vdGVzIGluIG9uZSBkYXkhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgZmllc3RhISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYXBvdyEgVHdvIG5vdGVzIGluIGEgZGF5IC0geW91J3JlIGEgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEYgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBhZHZlbnR1cmU/XCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCJcclxuXTtcclxuXHJcbmNvbnN0IHJhbmRvbVBvaW50Tm90aWNlczogc3RyaW5nW10gPSBbXHJcblx0XCJCYXppbmdhISBZb3UganVzdCBzbmFnZ2VkIFtYXSBwb2ludHMhXCIsXHJcblx0XCJLYWJvb20hIFtYXSBwb2ludHMgYXJlIG5vdyBpbiB5b3VyIHBvY2tldCFcIixcclxuXHRcIldvb2hvbyEgW1hdIHBvaW50cyBlYXJuZWQhIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJQb2ludHMgYWhveSEgW1hdIG1vcmUgaW4gdGhlIGJhbmshXCIsXHJcblx0XCJTY29yZSEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHRvdGFsIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlppcHBpdHktemFwISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJDaGFtcGlvbiBtb3ZlISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIkJpbmdvISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIlNoYXphbSEgW1hdIHBvaW50cyB0byB0aGUgcmVzY3VlIVwiLFxyXG5cdFwiS2EtY2hpbmchIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkJyYXZvISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJXZWxsIGRvbmUhIFtYXSBtb3JlIHBvaW50cyBpbiB0b3chXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMsIGp1c3QgbGlrZSB0aGF0IVwiLFxyXG5cdFwiQSByb3VuZCBvZiBhcHBsYXVzZSBmb3IgW1hdIHBvaW50cyFcIixcclxuXHRcIldob29zaCEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJXb28hIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJHcmVhdCBqb2IhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiRmFudGFzdGljISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJIb29yYXkhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiTmljZSBvbmUhIFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldCFcIixcclxuXHRcIldvb3Qgd29vdCEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQmFtISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJDb29sIGJlYW5zISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIlNwbGVuZGlkISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJNYXJ2ZWxvdXMhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFueSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiRXhxdWlzaXRlISBbWF0gcG9pbnRzIGluIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJPdXRzdGFuZGluZyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugam9iIVwiLFxyXG5cdFwiTWFnbmlmaWNlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJUZXJyaWZpYyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiRXhjZWxsZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJBd2Vzb21lISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJXZWxsIHBsYXllZCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIkltcHJlc3NpdmUhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCcmlsbGlhbnQhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk5pY2UgbW92ZSEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiU3RlbGxhciEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJXZWxsIGRlc2VydmVkISBbWF0gcG9pbnRzIGVhcm5lZCFcIlxyXG5dO1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlVHdvTm90ZUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0d29Ob3RlTWVzc2FnZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gdHdvTm90ZU1lc3NhZ2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlUG9pbnRzKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHJhbmRvbVBvaW50Tm90aWNlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSByYW5kb21Qb2ludE5vdGljZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG4vLyBFeGFtcGxlIHVzYWdlXHJcbi8vIGNvbnN0IHJhbmRvbVBvaW50cyA9IDEwMDsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIHBvaW50cyB2YWx1ZVxyXG4vLyBjb25zdCByYW5kb21NZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShyYW5kb21Qb2ludHMpO1xyXG4vLyBjb25zb2xlLmxvZyhyYW5kb21NZXNzYWdlKTtcclxuXHJcblxyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFBLG1CQUFxRTs7O0FDQXJFLHNCQUErQztBQUd4QyxJQUFNLGtCQUFzQztBQUFBLEVBQ2pELG1CQUFtQjtBQUFBLEVBQ25CLFdBQVc7QUFBQSxFQUNYLFNBQVM7QUFBQSxFQUNULGdCQUFnQjtBQUFBLEVBQ2hCLGFBQWE7QUFBQSxFQUNiLGVBQWU7QUFBQSxFQUNmLHNCQUFzQjtBQUFBLEVBQ3RCLHNCQUFzQjtBQUFBLEVBQ3RCLGFBQWE7QUFBQSxFQUNiLGtCQUFrQjtBQUFBLEVBQ2xCLHdCQUF3QjtBQUFBLEVBQ3hCLGNBQWM7QUFBQSxFQUNkLGFBQWE7QUFBQSxFQUNiLGdCQUFnQjtBQUFB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O0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3RELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUN6RDtBQUVPLFNBQVMsa0JBQWtCLFFBQTJCO0FBQzNELE1BQUksUUFBbUIsVUFBVSxDQUFDO0FBQ2xDLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksVUFBVSxLQUFLLFFBQVE7QUFDekIsY0FBUTtBQUFBLElBQ1YsT0FBTztBQUNMO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLHFCQUFxQixhQUE2QjtBQUNoRSxNQUFJLGVBQWU7QUFDbkIsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxlQUFlLEtBQUssU0FBUyxnQkFBZ0IsR0FBRztBQUNsRCxxQkFBZSxLQUFLO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBR0YsU0FBTztBQUNQOzs7QUM5SUYsSUFBTSwwQkFBb0M7QUFBQSxFQUN6QztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0sa0JBQTRCO0FBQUEsRUFDakM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0scUJBQStCO0FBQUEsRUFDcEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FB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QjtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImFwcCIsICJvYmoiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiTUlMTElTRUNPTkRTX0lOX1dFRUsiLCAiZm9ybWF0dGVycyIsICJsb2NhbGl6ZSIsICJ5IiwgIk0iLCAiZCIsICJhIiwgImgiLCAiSCIsICJtIiwgInMiLCAiUyIsICJkYXRlTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXRMb25nIiwgInRpbWVMb25nRm9ybWF0dGVyIiwgImRhdGVUaW1lTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXQiLCAiZm9ybWF0RGlzdGFuY2UiLCAiZm9ybWF0IiwgImZvcm1hdFJlbGF0aXZlIiwgIm9yZGluYWxOdW1iZXIiLCAidmFsdWVDYWxsYmFjayIsICJkZWZhdWx0T3B0aW9ucyIsICJsb2NhbGUiLCAibWF0Y2giLCAicGF0aCIsICJhcHAiLCAiZmlsZU5hbWUiLCAiY3VycmVudENvdW50IiwgImkiLCAiaSIsICJlIiwgImkiLCAibWF0Y2giLCAiZmlsZSIsICJhcHAiXQp9Cg== diff --git a/src/main.ts b/src/main.ts index 1032506..3a8489b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -445,7 +445,7 @@ export default class gamification extends Plugin { } console.log(`pointsReceived: ${pointsReceived}`) if (pointsReceived > 0){ - const messagePoints = getRandomMessagePoints(pointsReceived * this.settings.badgeBoosterFactor) + const messagePoints = getRandomMessagePoints(pointsReceived * (this.settings.badgeBoosterFactor + this.settings.streakbooster)) new Notice(messagePoints) console.log(messagePoints) } @@ -521,7 +521,7 @@ export default class gamification extends Plugin { this.settings.streakboosterDate = window.moment().format('DD.MM.YYYY'); await this.saveSettings(); await this.giveStatusPoints(pointsForDailyChallenge) - const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge); + const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge * (this.settings.badgeBoosterFactor + this.settings.streakbooster)); console.log(`daily Challenge reached! ${newDailyNoteCreationTask}/2 created.`) new Notice(message) console.log(message) @@ -568,7 +568,7 @@ export default class gamification extends Plugin { await this.saveSettings(); await this.giveStatusPoints(pointsForWeeklyChallenge) console.log(`Weekly Challenge reached! ${newWeeklyNoteCreationTask}/7 created in a chain.`) - const message = getRandomMessageWeeklyChallenge(pointsForWeeklyChallenge); + const message = getRandomMessageWeeklyChallenge(pointsForWeeklyChallenge * (this.settings.badgeBoosterFactor + this.settings.streakbooster)); new Notice(message) console.log(message) } else { From efbd3b9e759c80519e84ce80685efb854a871509 Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 22:37:29 +0200 Subject: [PATCH 08/15] catch gliches for factor --- main.js | 8 +++++--- src/main.ts | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/main.js b/main.js index ea3f1d0..5f54261 100644 --- a/main.js +++ b/main.js @@ -3081,12 +3081,14 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` return this.updateAvatarPage(this.settings.avatarPageName); } async increaseStreakbooster(increaseValue) { - this.settings.streakbooster += increaseValue; + const newValue = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); + this.settings.streakbooster = newValue; await this.saveData(this.settings); console.log(`streakbooster: ${this.settings.streakbooster}`); } async decreaseStreakbooster(decreaseValue) { - let newValue = this.settings.streakbooster -= decreaseValue; + let newValue = parseFloat((this.settings.streakbooster - decreaseValue).toFixed(1)); + this.settings.streakbooster = newValue; if (newValue < 0) { newValue = 0; } @@ -3448,4 +3450,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJyk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpXHJcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlICogKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyKSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZWFjaGVkISAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBjcmVhdGVkLmApXHJcblx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHQvLyBkbyBub3RoaW5nXHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBub3RlIGNyZWF0aW9uIHdhcyByYXRlZCBhbHJlYWR5IHRvZGF5LmApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCkge1xyXG5cdFx0bGV0IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRpZiAoY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA8IDcpIHtcclxuXHRcdFx0Y3VycmVudFdlZWtseUNyZWF0ZWROb3RlcysrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXIpIHtcclxuXHRcdGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrIDw9IDYpIHtcclxuXHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDEpO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSAqICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcikpO1xyXG5cdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgdXBkYXRlU3RhdHVzQmFyKHN0YXR1c2JhcjogSFRNTFNwYW5FbGVtZW50KXtcclxuXHRcdGNvbnN0IGN1cnJlbnRMZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKVxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NiYXJQZXJjZW50ID0gKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzIC0gY3VycmVudExldmVsLnBvaW50cykvKGN1cnJlbnRMZXZlbC5wb2ludHNOZXh0IC0gY3VycmVudExldmVsLnBvaW50cykqMTAwO1xyXG5cdFx0Y29uc3QgY2hhck51bVByb2dyZXNzYmFyID0gMTBcclxuXHRcdGNvbnN0IGJhckxlbmd0aCA9IE1hdGgucm91bmQocHJvZ3Jlc3NiYXJQZXJjZW50IC8gY2hhck51bVByb2dyZXNzYmFyKVxyXG5cdFx0c3RhdHVzYmFyLnNldFRleHQoYFx1RDgzQ1x1REZCMnxsdmw6ICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gfCAke3RoaXMuY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyLCBiYXJMZW5ndGgpfWApXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZVByb2dyZXNzYmFyKGNoYXJOdW1Qcm9ncmVzc2JhcjogbnVtYmVyLCBiYXJMZW5ndGg6IG51bWJlcikge1xyXG5cdFx0bGV0IHByb2dyZXNzYmFyID0gJydcclxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDw9IGNoYXJOdW1Qcm9ncmVzc2JhcjsgaSsrKSB7XHJcblx0XHRcdGlmIChpIDw9IGJhckxlbmd0aCkge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICc9J1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICctJ1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJvZ3Jlc3NiYXI7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdFx0Y29uc29sZS5sb2coJ2xvYWRTZXR0aW5ncygpJylcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNUb0FkZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGxldCBib29zdGVyRmFjdG9yID0gMTtcclxuXHRcdGxldCBzdHJlYWtib29zdGVyID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyO1xyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSBwb2ludHNUb0FkZCAqIChib29zdGVyRmFjdG9yICsgc3RyZWFrYm9vc3RlcikgKyB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlU3RyZWFrYm9vc3RlcihpbmNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKz0gaW5jcmVhc2VWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Y29uc29sZS5sb2coYHN0cmVha2Jvb3N0ZXI6ICR7dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyfWApXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZGVjcmVhc2VTdHJlYWtib29zdGVyKGRlY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdGxldCBuZXdWYWx1ZSA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtPSBkZWNyZWFzZVZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKicgKyB0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayArICcvMioqICAgfCc7XHJcblx0XHRjb25zdCBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gOiBudW1iZXIgPSA3IC0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0Y29uc3Qgd2Vla2x5Q2hhbGxlbmdlID0gJ3wgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKicgKyB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgKyAnLzcqKiAgIHxcXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW2RheXMgZG9uZSBpbiBhIHJvd11cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XFxuICAgIGRhdGE6IFsnICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgZGF5c0xlZnRJbldlZWtseUNoYWluICsgJ11cXG54TWluOiAwXFxueE1heDogN1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCc7XHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gJ3wgKipib29zdGVyIGZhY3RvcioqIHwgKionICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyICsgJyoqIHwnXHJcblxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCAmJiByZWZlcmVuY2UzICE9IG51bGwgJiYgcmVmZXJlbmNlNCAhPSBudWxsKXtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAyO1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyNDtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQzID0gcmVmZXJlbmNlMyArIDI0IC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDQgPSByZWZlcmVuY2U0IC0gMSAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgNTUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDQgPSByZWZlcmVuY2U0IC0gMjUgOyAvLyBubyBpZGVhIHdieSBvZmZzZXQgNTUgaXMgbmVlZGVkXHJcblx0XHRcdFxyXG5cclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdQb2ludHNTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgZGFpbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMzID0gWy4uLm5ld0xpbmVzMi5zbGljZSgwLCBzdGFydDMpLCB3ZWVrbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzMi5zbGljZShlbmQzKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzNCA9IFsuLi5uZXdMaW5lczMuc2xpY2UoMCwgc3RhcnQ0KSwgYm9vc3RlckZhY3RvciwgLi4ubmV3TGluZXMzLnNsaWNlKGVuZDQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczQuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVjZWl2ZUJhZGdlXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZ2l2ZUJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBiYWRnZS5sZXZlbCArIFwiOiAqXCIgKyBiYWRnZS5uYW1lICsgXCIqXCIpe1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAxO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiArIDI7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKiBcIiArIGJhZGdlLmxldmVsICsgXCJcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV1cclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczIuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZUluaXRCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCApe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHJlbW92ZUJhZGdlc1doZW5Jbml0TGV2ZWxIaWdoZXIoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgbGV2ZWw6IG51bWJlcil7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIG91dHN0YW5kaW5nXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiA9PSBudWxsKXtcclxuXHRcdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHJcblx0XHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBsZXZlbCkge1xyXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHJlZmVyZW5jZSArIDEpLCAuLi5saW5lcy5zbGljZShyZWZlcmVuY2UyKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgY3JlYXRlQ2hhcnQodmF1bHQ6IFZhdWx0KTogUHJvbWlzZTxzdHJpbmc+e1xyXG5cdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBlYXJsaWVzdEZpbGUgPSBmaW5kRWFybGllc3RNb2RpZmllZEZpbGUoZmlsZXMpXHJcblx0XHQvL2xldCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZVxyXG5cdFx0Ly9pZiAoZWFybGllc3RGaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZSApe1xyXG5cdFx0Y29uc3QgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQubXRpbWVcclxuXHRcdC8vfVxyXG5cclxuXHRcdGxldCBtb250aENvdW50ZXIgPSAwIC8vZm9ybWF0KG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksICdNTScpO1xyXG5cdFx0bGV0IGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0Ly9jb25zdCBmaWxlRGF0ZU1vbnRoTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IGZpbGVEYXRlTW9udGhNYXBNb2QgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgbW9udGhjb3VudCA9IG1vbnRoc0JldHdlZW4obmV3IERhdGUoZWFybGllc3REYXRlKSwgbmV3IERhdGUoKSlcclxuXHRcdGxldCBkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdGxldCB5TGFiZWwgPSBcIlwiXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgY3JlYXRlZFxyXG5cdFx0Lyp3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9Ki9cclxuXHJcblx0XHRtb250aENvdW50ZXIgPSAwXHJcblx0XHRkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIG1vZGlmaWVkXHJcblx0XHR3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0eUxhYmVsID0geUxhYmVsICsgZGF0ZVN0cmluZyArIFwiLCBcIlxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH1cclxuXHRcdHlMYWJlbCA9IHlMYWJlbC5zbGljZSgwLHlMYWJlbC5sZW5ndGgtMilcclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHQvKmNvbnN0IGNyZWF0aW9uRGF0ZXMgPSBnZXRDcmVhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjcmVhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH0qL1xyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IG1vZCBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHRjb25zdCBtb2RpZmljYXRpb25EYXRlcyA9IGdldE1vZGlmaWNhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtb2RpZmljYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIGNyZWF0ZWRcclxuXHRcdC8qbGV0IGNoYXJTdHJpbmdDcmVhdGVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXApIHtcclxuXHRcdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkLnNsaWNlKDAsY2hhclN0cmluZ0NyZWF0ZWQubGVuZ3RoLTIpKi9cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgbW9kaWZpZWRcclxuXHRcdGxldCBjaGFyU3RyaW5nTW9kaWZpZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcE1vZCkge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBrZXk6ICR7a2V5fSwgdmFsdWU6ICR7dmFsdWV9YCk7XHJcblx0XHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQuc2xpY2UoMCxjaGFyU3RyaW5nTW9kaWZpZWQubGVuZ3RoLTIpXHJcblxyXG5cdFx0cmV0dXJuIGNyZWF0ZUNoYXJ0Rm9ybWF0KHlMYWJlbCwgY2hhclN0cmluZ01vZGlmaWVkLCB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBkZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWw6IFByb21pc2U8Ym9vbGVhbj4pe1xyXG5cdFx0bmV3TGV2ZWwudGhlbigocmVzdWx0OiBib29sZWFuKT0+IHtcclxuXHRcdFx0aWYocmVzdWx0KXtcclxuXHRcdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbCh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsLCBmYWxzZSlcclxuXHRcdFx0XHRuZXcgTm90aWNlKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coYGJhZGdlIGZvciBsZXZlbCAke3RoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWx9IGlzICR7YmFkZ2UubmFtZX0gLSAke2JhZGdlLmxldmVsfWApXHJcblx0XHRcdFx0dGhpcy5naXZlQmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgYmFkZ2UpXHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gMTtcclxuXHRcdFx0XHR0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlbW92ZUtleXNGcm9tRnJvbnRtYXR0ZXIoKSB7XHJcblx0XHQvL2NvbnN0IHsgVmF1bHQsIFRGaWxlIH0gPSB3aW5kb3cuYXBwO1xyXG5cdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHBcclxuXHRcdC8vY29uc3QgdmF1bHQgPSBWYXVsdC5yZW9wZW4oKTtcclxuXHJcblx0XHQvLyBHZXQgYWxsIE1hcmtkb3duIGZpbGVzIGluIHRoZSB2YXVsdFxyXG5cdFx0Ly9jb25zdCBtYXJrZG93bkZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZmlsZUNvdW50TWFwID0gYXdhaXQgZ2V0RmlsZUNvdW50TWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Zm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlQ291bnRNYXAua2V5cygpKSB7XHJcblx0XHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0RmlsZXMoKTtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IGZpbGVzLmZpbmQoZmlsZSA9PiBmaWxlLmJhc2VuYW1lID09PSBmaWxlTmFtZSk7XHJcblx0XHRcdGlmICghZmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGVOYW1lfSBub3QgZm91bmQuYCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9jb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBuZXcgTm90aWNlKGBSZW1vdmVkIHNwZWNpZmllZCBrZXlzIGZyb20gZnJvbnRtYXR0ZXIgZnJvbSBmaWxlIFxcXCIke2ZpbGVOYW1lfVxcXCIuYCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB3aGljaExldmVsTmV4dEJhZGdlKGN1cnJlbnRMZXZlbDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+e1xyXG5cdFx0bGV0IG5leHRCYWRnZUxldmVsID0gMFxyXG5cdFx0Zm9yIChsZXQgaSA9IGN1cnJlbnRMZXZlbDsgaSA8IDExMDsgaSsrKXtcclxuXHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoaSwgdHJ1ZSlcclxuXHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRjb25zdCBtYXRjaCA9IGJhZGdlLmxldmVsLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gY3VycmVudExldmVsICYmIG5leHRCYWRnZUxldmVsID09IDAgKSB7XHJcblx0XHRcdFx0XHRuZXh0QmFkZ2VMZXZlbCA9IGxldmVsTnVtYmVyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5leHRCYWRnZUxldmVsXHJcblx0fVxyXG5cclxuXHRhc3luYyBib29zdGVyRm9ySW5pdCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cdFx0Y29uc3QgbmV4dEJhZGdlQXQgPSBhd2FpdCB0aGlzLndoaWNoTGV2ZWxOZXh0QmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbClcclxuXHRcdGNvbnN0IHN0YXR1c1BvaW50c1RvUmVhY2ggPSBzdGF0dXNQb2ludHNGb3JMZXZlbChuZXh0QmFkZ2VBdClcclxuXHRcdC8vY29uc29sZS5sb2coYHN0YXR1c1BvaW50c1RvUmVhY2ggZm9yIG5leHQgQmFkZ2U6ICR7c3RhdHVzUG9pbnRzVG9SZWFjaH1gKVxyXG5cdFx0Ly8gNTAgTm90ZXMgZnJvbSBMZXZlbCAxIHRvIDUgdG8gZ2V0IHRoZSBmaXJzdCBiYWRnZS5cclxuXHRcdC8vIDMwMCBQb2ludHMgaW4gYXZlcmFnZSBmb3IgYSBOb3RlLlxyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9IE1hdGgucm91bmQoKHN0YXR1c1BvaW50c1RvUmVhY2ggLSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cykvNTAvMzAwKTtcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gYm9vc3RlckZhY3RvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IHRydWVcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdC8vY29uc29sZS5sb2coYGJvb3N0ZXJGYWt0b3I6ICR7Ym9vc3RlckZhY3Rvcn1gKVxyXG5cdFx0cmV0dXJuIGJvb3N0ZXJGYWN0b3JcclxuXHR9XHJcblxyXG5cdGFzeW5jIG9wZW5BdmF0YXJGaWxlKCkge1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHt0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSl7XHJcblx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpPy5wYXRoIHx8ICcnO1xyXG5cdFx0XHRhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChleGlzdGluZ0ZpbGUucGF0aCwgc291cmNlUGF0aCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIkZpbGUgbm90IGZvdW5kIG9yIHVuYWJsZSB0byBvcGVuLlwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaXNTYW1lRGF5KGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3QgY3VycmVudERhdGUgPSB3aW5kb3cubW9tZW50KCk7IC8vIEdldCB0aGUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGN1cnJlbnREYXRlLmlzU2FtZShpbnB1dERhdGUsICdkYXknKTsgLy8gQ2hlY2sgaWYgdGhleSBhcmUgdGhlIHNhbWUgZGF5XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzT25lRGF5QmVmb3JlKGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3Qgb25lRGF5QmVmb3JlQ3VycmVudCA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5Jyk7IC8vIENhbGN1bGF0ZSBvbmUgZGF5IGJlZm9yZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gaW5wdXREYXRlLmlzU2FtZShvbmVEYXlCZWZvcmVDdXJyZW50LCAnZGF5Jyk7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUF2YXRhckZpbGUoYXBwOiBBcHAsIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHQvL3NldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHQvLyBEZWZpbmUgdGhlIGZpbGUgbmFtZSBhbmQgY29udGVudFxyXG5cdC8vY29uc3QgZmlsZU5hbWUgPSAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJzsgLy8gdGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZTtcclxuXHQvL2NvbnNvbGUubG9nKGBmaWxlTmFtZTogJHtmaWxlTmFtZX1gKVxyXG5cclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2ZpbGVOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHtmaWxlTmFtZX0ubWQgYWxyZWFkeSBleGlzdHNgKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblx0Ly8gQ3JlYXRlIHRoZSBmaWxlIGluIHRoZSByb290IG9mIHRoZSB2YXVsdFxyXG5cdGF3YWl0IGFwcC52YXVsdC5jcmVhdGUoYCR7ZmlsZU5hbWV9Lm1kYCwgYXZhdGFySW5pdENvbnRlbnQpO1xyXG5cclxufVxyXG5cclxuXHJcbmNsYXNzIE1vZGFsSW5mb3JtYXRpb25ib3ggZXh0ZW5kcyBNb2RhbCB7XHJcblx0cHJpdmF0ZSByZWFkb25seSBkaXNwbGF5VGV4dDogc3RyaW5nOyAvLyBTdG9yZSB0aGUgdGV4dCB0byBiZSBkaXNwbGF5ZWRcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIGRpc3BsYXlUZXh0OiBzdHJpbmcpIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0XHR0aGlzLmRpc3BsYXlUZXh0ID0gZGlzcGxheVRleHQ7IC8vIFN0b3JlIHRoZSBwYXNzZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25PcGVuKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuc2V0VGV4dCh0aGlzLmRpc3BsYXlUZXh0KTsgLy8gVXNlIHRoZSBzdG9yZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25DbG9zZSgpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUZvcm1hdFN0cmluZ3MobGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKSB7XHJcblx0Y29uc3QgYWN0aXZlVmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XHJcblxyXG5cdGlmICghYWN0aXZlVmlldykge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIGFjdGl2ZSBNYXJrZG93biB2aWV3IGZvdW5kLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGNvbnN0IGVkaXRvciA9IGFjdGl2ZVZpZXcuZWRpdG9yO1xyXG5cdGNvbnN0IHNlbGVjdGVkVGV4dCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHJcblx0aWYgKCFzZWxlY3RlZFRleHQpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyB0ZXh0IHNlbGVjdGVkIChmb3IgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzd2l0Y2ggTGF5ZXIgMiAmIDMpLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGxldCByZXBsYWNlZFRleHQgPSBzZWxlY3RlZFRleHQucmVwbGFjZUFsbChsYXllcjIsIFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIpO1xyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKGxheWVyMywgXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiLCBsYXllcjIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIiwgbGF5ZXIzKVxyXG5cclxuXHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihyZXBsYWNlZFRleHQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGxldCByYXRpbmdGYWt0b3I6IG51bWJlclxyXG5cdGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gcmF0aW5nTmV3IC0gcGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZ0Zha3RvciA9IDBcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdGYWt0b3JcclxufVxyXG5cclxuXHJcblxyXG4gIFxyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuIiwgImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCBnYW1pZmljYXRpb24gZnJvbSAnLi9tYWluJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogUGFydGlhbDxJU2V0dGluZ3M+ID0ge1xuICBlbmFibGVJbml0Q29tbWFuZDogdHJ1ZSxcbiAgYmluZEVudGVyOiB0cnVlLFxuICBiaW5kVGFiOiB0cnVlLFxuICBhdmF0YXJQYWdlTmFtZTogJ0F2YXRhciAtIEdhbWlmaWNhdGlvbicsXG4gIHRhZ3NFeGNsdWRlOiAnJyxcbiAgZm9sZGVyRXhjbHVkZTogJ0V4Y2FsaWRyYXcnLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogJz09JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6ICcqKicsXG4gIG51bUFsbEZpbGVzOiAxLFxuICBudW1BbGxGaWxlc0NvdW50OiAwLFxuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiAwLFxuICBzdGF0dXNQb2ludHM6IDAsXG4gIHN0YXR1c0xldmVsOiAxLFxuICB4cEZvck5leHRMZXZlbDogMTAwMCxcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiAnMTIuMDguMjAyMycsXG4gIGJhZGdlQm9vc3RlclN0YXRlOiBmYWxzZSxcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiAxLFxuICBkZWJ1ZzogZmFsc2UsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgc3RyZWFrYm9vc3RlcjogMCxcbiAgc3RyZWFrYm9vc3RlckRhdGU6ICcxMi4wOC4yMDIzJyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBzdHJpbmc7XG59XG5cblxuZXhwb3J0IGNsYXNzIEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBnYW1pZmljYXRpb247XG4gIFxuICBwdWJsaWMgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kVGFiOiBib29sZWFuO1xuICBwdWJsaWMgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgcHVibGljIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIHB1YmxpYyBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIHB1YmxpYyBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHB1YmxpYyB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgcHVibGljIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBwdWJsaWMgZGVidWc6IGJvb2xlYW47XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlckRhdGU6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBnYW1pZmljYXRpb24pIHtcblx0ICBzdXBlcihhcHAsIHBsdWdpbik7XG5cdCAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cbiAgXG5cdHB1YmxpYyBkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Y29udGFpbmVyRWwuYWRkQ2xhc3MoXCJleGNhbGlkcmF3LXNldHRpbmdzXCIpO1xuXHRcdHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcblxuXHRcdGNvbnN0IGNvZmZlZURpdiA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdihcImNvZmZlZVwiKTtcblx0XHRjb2ZmZWVEaXYuYWRkQ2xhc3MoXCJleC1jb2ZmZWUtZGl2XCIpO1xuXHRcdGNvbnN0IGNvZmZlZUxpbmsgPSBjb2ZmZWVEaXYuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRocmVmOiBcImh0dHBzOi8va28tZmkuY29tL2FuZHJlYXN0cmViaW5nXCIsXG5cdFx0fSk7XG5cdFx0Y29uc3QgY29mZmVlSW1nID0gY29mZmVlTGluay5jcmVhdGVFbChcImltZ1wiLCB7XG5cdFx0YXR0cjoge1xuXHRcdFx0c3JjOiBcImh0dHBzOi8vY2RuLmtvLWZpLmNvbS9jZG4va29maTMucG5nP3Y9M1wiLFxuXHRcdH0sXG5cdFx0fSk7XG5cdFx0Y29mZmVlSW1nLmhlaWdodCA9IDQ1O1xuXG5cdFx0Ly9jb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXHRcdC8vY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgXG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnR2FtaWZ5IHlvdXIgUEtNIC0gU2V0dGluZ3MnIH0pO1xuXHRcdGNvbnNvbGUubG9nKCdzZXR0aW5ncyBjYWxsZWQnKVxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJyN0YWdzIHRvIGlnbm9yZScpXG5cdFx0XHQuc2V0RGVzYygnZW50ZXIgdGFncyB3aXRob3V0ICMgYW5kIHNlcGFyYXRlIHdpdGggXCIsIFwiLlxcbkluY2x1ZGUgbmVzdGVkIHRhZ3MuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgdGFnMSwgdGFnMi9zdWJ0YWcsIFx1MjAyNicpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdFx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdmb2xkZXIgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciBmb2xkZXIgd2hpY2hzIGNvbnRlbnQgc2hhbGwgYmUgaWdub3JlZC4gU2VwYXJhdGUgd2l0aCBcIiwgXCIuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgZm9sZGVyMSwgZm9sZGVyMiwgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9maWxlIFBhZ2UgTmFtZScpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2UgaGVyZSB0aGUgbmFtZSBvZiB5b3VyIHByb2ZpbGUgcGFnZSBpZiB5b3UgbGlrZS4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCduYW1lJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cdFx0XHRcdFxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ090aGVyIFNldHRpbmdzJyB9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdEaXNhYmxlIEluaXQgQ29tbWFuZCcpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiByZW1vdmUgdGhlIGluaXQgY29tbWFuZCBmcm9tIGNvbW1hbmQgcHJvbXB0IGJ5IHN3aXRjaGluZyBvZmYuXFxucmVzdGFydCBuZWVkZWQuJylcblx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4gXG5cdFx0XHRcdHRvZ2dsZVxuICAgICAgICAgIFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpXG4gICAgICAgIFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kID0gdmFsdWU7XG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgXHRcdFx0fSksXG5cdFx0XHQpO1xuXG5cdFx0XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnbGltaXQgdGhlIHZpc2libGUgbW9udGggaW4gdGhlIGNoYXJ0IG9uIHlvdXIgYXZhdGFyIHBhZ2U6ICcgKyB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdC5zZXREZXNjKCdpZiAwLCBhbGwgbW9udGggd2lsbCBiZSBzaG93bi4gRW50ZXIgYSBudW1iZXIgaG93IG1hbnkgbW9udGggc2hhbGwgYmUgc2hvd24uJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTnVtYmVyIG9mIE1vbnRoIHRvIHNob3cnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlLnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cbiAgXG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9ncmVzc2l2ZSBTdW1tYXJpemF0aW9uJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSB3aGljaCBmb3JtYXR0aW5nIHlvdSB1c2UgZm9yIExheWVyIDIgYW5kIDMuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMiBpcyB1c3VhbGx5ICoqJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSlcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMyBpcyB1c3VhbGx5ID09Jylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0fSkpO1xuXG5cdH1cbiAgfSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1aXJlZEFyZ3MocmVxdWlyZWQsIGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgcmVxdWlyZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHJlcXVpcmVkICsgJyBhcmd1bWVudCcgKyAocmVxdWlyZWQgPiAxID8gJ3MnIDogJycpICsgJyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3MubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgZGF0ZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZShOYU4pKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBzb21lIHZhbHVlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKCcyMDE0LTAyLTMxJylcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIG9iamVjdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSh7fSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTtcblxuICAvLyBDbG9uZSB0aGUgZGF0ZVxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YoYXJndW1lbnQpID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjc3RyaW5nLWFyZ3VtZW50c1wiKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufSIsICJpbXBvcnQgaXNEYXRlIGZyb20gXCIuLi9pc0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNWYWxpZFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB2YWxpZD9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgZmFsc2UgaWYgYXJndW1lbnQgaXMgSW52YWxpZCBEYXRlIGFuZCB0cnVlIG90aGVyd2lzZS5cbiAqIEFyZ3VtZW50IGlzIGNvbnZlcnRlZCB0byBEYXRlIHVzaW5nIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBJbnZhbGlkIERhdGUgaXMgYSBEYXRlLCB3aG9zZSB0aW1lIHZhbHVlIGlzIE5hTi5cbiAqXG4gKiBUaW1lIHZhbHVlIG9mIERhdGU6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuOS4xLjFcbiAqXG4gKiBAcGFyYW0geyp9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlIGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgyMDE0LCAxLCAzMSkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWx1ZSwgY29udmVydGFibGUgaW50byBhIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKDEzOTM4MDQ4MDAwMDApXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKCcnKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNWYWxpZChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIGlmICghaXNEYXRlKGRpcnR5RGF0ZSkgJiYgdHlwZW9mIGRpcnR5RGF0ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgcmV0dXJuICFpc05hTihOdW1iZXIoZGF0ZSkpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufSIsICJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdGltZXN0YW1wID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59IiwgImltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSBcIi4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9EQVkgPSA4NjQwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0RheU9mWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZZZWFyVGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIHZhciBkaWZmZXJlbmNlID0gdGltZXN0YW1wIC0gc3RhcnRPZlllYXJUaW1lc3RhbXA7XG4gIHJldHVybiBNYXRoLmZsb29yKGRpZmZlcmVuY2UgLyBNSUxMSVNFQ09ORFNfSU5fREFZKSArIDE7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSAxO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgeWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSk7XG4gIHZhciBmb3VydGhPZkphbnVhcnkgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5KTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENJU09XZWVrKGRhdGUpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkYXRlKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgInZhciBkZWZhdWx0T3B0aW9ucyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykge1xuICBkZWZhdWx0T3B0aW9ucyA9IG5ld09wdGlvbnM7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8ud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZmlyc3RXZWVrT2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWtPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mVGhpc1llYXIsIG9wdGlvbnMpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuICB2YXIgeWVhciA9IGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWsgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vlay5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWssIG9wdGlvbnMpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ1dlZWsoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlciwgdGFyZ2V0TGVuZ3RoKSB7XG4gIHZhciBzaWduID0gbnVtYmVyIDwgMCA/ICctJyA6ICcnO1xuICB2YXIgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpO1xuICB3aGlsZSAob3V0cHV0Lmxlbmd0aCA8IHRhcmdldExlbmd0aCkge1xuICAgIG91dHB1dCA9ICcwJyArIG91dHB1dDtcbiAgfVxuICByZXR1cm4gc2lnbiArIG91dHB1dDtcbn0iLCAiaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqL1xudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuXG4gICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09ICd5eScgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbikge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICByZXR1cm4gdG9rZW4gPT09ICdNJyA/IFN0cmluZyhtb250aCArIDEpIDogYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENEYXRlKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRVVENIb3VycygpIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlWzBdO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSAnYW0nID8gJ2EubS4nIDogJ3AubS4nO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDTWludXRlcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgIHZhciBmcmFjdGlvbmFsU2Vjb25kcyA9IE1hdGguZmxvb3IobWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMykpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZnJhY3Rpb25hbFNlY29uZHMsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJpbXBvcnQgZ2V0VVRDRGF5T2ZZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0RheU9mWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuaW1wb3J0IGxpZ2h0Rm9ybWF0dGVycyBmcm9tIFwiLi4vbGlnaHRGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG52YXIgZGF5UGVyaW9kRW51bSA9IHtcbiAgYW06ICdhbScsXG4gIHBtOiAncG0nLFxuICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgbm9vbjogJ25vb24nLFxuICBtb3JuaW5nOiAnbW9ybmluZycsXG4gIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgbmlnaHQ6ICduaWdodCdcbn07XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCBNaWxsaXNlY29uZHMgaW4gZGF5ICAgICAgICAgICAgfFxuICogfCAgYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgfCAgQiAgfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgfFxuICogfCAgYyAgfCBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlayAgfCAgQyogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZSAgfCBMb2NhbCBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgfCAgRSAgfCBEYXkgb2Ygd2VlayAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRiogfCBEYXkgb2Ygd2VlayBpbiBtb250aCAgICAgICAgICAgfFxuICogfCAgZyogfCBNb2RpZmllZCBKdWxpYW4gZGF5ICAgICAgICAgICAgfCAgRyAgfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaSEgfCBJU08gZGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgfCAgSSEgfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgfFxuICogfCAgaiogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfCAgSiogfCBMb2NhbGl6ZWQgaG91ciB3L28gZGF5IHBlcmlvZCAgfFxuICogfCAgayAgfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgfCAgSyAgfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbCogfCAoZGVwcmVjYXRlZCkgICAgICAgICAgICAgICAgICAgfCAgTCAgfCBTdGFuZC1hbG9uZSBtb250aCAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbyEgfCBPcmRpbmFsIG51bWJlciBtb2RpZmllciAgICAgICAgfCAgTyAgfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgfFxuICogfCAgcCEgfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgfCAgUCEgfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgfFxuICogfCAgcSAgfCBTdGFuZC1hbG9uZSBxdWFydGVyICAgICAgICAgICAgfCAgUSAgfCBRdWFydGVyICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgciogfCBSZWxhdGVkIEdyZWdvcmlhbiB5ZWFyICAgICAgICAgfCAgUiEgfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgdCEgfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgfCAgVCEgfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgfFxuICogfCAgdSAgfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgfCAgVSogfCBDeWNsaWMgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgdiogfCBUaW1lem9uZSAoZ2VuZXJpYyBub24tbG9jYXQuKSAgfCAgViogfCBUaW1lem9uZSAobG9jYXRpb24pICAgICAgICAgICAgfFxuICogfCAgdyAgfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgfCAgVyogfCBXZWVrIG9mIG1vbnRoICAgICAgICAgICAgICAgICAgfFxuICogfCAgeCAgfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgfCAgWCAgfCBUaW1lem9uZSAoSVNPLTg2MDEpICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgfFxuICogfCAgeiAgfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgfCAgWiogfCBUaW1lem9uZSAoYWxpYXNlcykgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAhIGFyZSBub24tc3RhbmRhcmQsIGJ1dCBpbXBsZW1lbnRlZCBieSBkYXRlLWZuczpcbiAqIC0gYG9gIG1vZGlmaWVzIHRoZSBwcmV2aW91cyB0b2tlbiB0byB0dXJuIGl0IGludG8gYW4gb3JkaW5hbCAoc2VlIGBmb3JtYXRgIGRvY3MpXG4gKiAtIGBpYCBpcyBJU08gZGF5IG9mIHdlZWsuIEZvciBgaWAgYW5kIGBpaWAgaXMgcmV0dXJucyBudW1lcmljIElTTyB3ZWVrIGRheXMsXG4gKiAgIGkuZS4gNyBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAqIC0gYElgIGlzIElTTyB3ZWVrIG9mIHllYXIsIGFzIG9wcG9zZWQgdG8gYHdgIHdoaWNoIGlzIGxvY2FsIHdlZWsgb2YgeWVhci5cbiAqIC0gYFJgIGlzIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLCBhcyBvcHBvc2VkIHRvIGBZYCB3aGljaCBpcyBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogICBgUmAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJYCBhbmQgYGlgXG4gKiAgIGZvciB1bml2ZXJzYWwgSVNPIHdlZWstbnVtYmVyaW5nIGRhdGUsIHdoZXJlYXNcbiAqICAgYFlgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgd2AgYW5kIGBlYFxuICogICBmb3Igd2Vlay1udW1iZXJpbmcgZGF0ZSBzcGVjaWZpYyB0byB0aGUgbG9jYWxlLlxuICogLSBgUGAgaXMgbG9uZyBsb2NhbGl6ZWQgZGF0ZSBmb3JtYXRcbiAqIC0gYHBgIGlzIGxvbmcgbG9jYWxpemVkIHRpbWUgZm9ybWF0XG4gKi9cblxudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIEVyYVxuICBHOiBmdW5jdGlvbiBHKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBlcmEgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgPiAwID8gMSA6IDA7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gQUQsIEJDXG4gICAgICBjYXNlICdHJzpcbiAgICAgIGNhc2UgJ0dHJzpcbiAgICAgIGNhc2UgJ0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBBLCBCXG4gICAgICBjYXNlICdHR0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcbiAgICAgIGNhc2UgJ0dHR0cnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAneW8nKSB7XG4gICAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoeWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnkoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFk6IGZ1bmN0aW9uIFkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHNpZ25lZFdlZWtZZWFyID0gZ2V0VVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgd2Vla1llYXIgPSBzaWduZWRXZWVrWWVhciA+IDAgPyBzaWduZWRXZWVrWWVhciA6IDEgLSBzaWduZWRXZWVrWWVhcjtcblxuICAgIC8vIFR3byBkaWdpdCB5ZWFyXG4gICAgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgICB2YXIgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7XG4gICAgfVxuXG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICdZbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIFIoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgaXNvV2Vla1llYXIgPSBnZXRVVENJU09XZWVrWWVhcihkYXRlKTtcblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBFeHRlbmRlZCB5ZWFyLiBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZyB0aGUgeWVhciBvZiB0aGlzIGNhbGVuZGFyIHN5c3RlbS5cbiAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIGxvY2FsaXplcnMgYXJlIEIuQy4geWVhcnM6XG4gIC8vIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gIC8vIHwtLS0tLS18LS0tLS18LS0tLS18XG4gIC8vIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gIC8vIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gIC8vIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gIC8vIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAgLy8gd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkLlxuICB1OiBmdW5jdGlvbiB1KGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBRdWFydGVyXG4gIFE6IGZ1bmN0aW9uIFEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAnUSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAnUVEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdRbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAnUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAnUVFRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdRUVFRJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcTogZnVuY3Rpb24gcShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdxJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdxcSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ3FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdxcXFxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ3FxcXEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnTSc6XG4gICAgICBjYXNlICdNTSc6XG4gICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdNbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ01NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTU1NTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ01NTU0nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbiBMKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhtb250aCArIDEpO1xuICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMTCc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ0xvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdMTExMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTExMTCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIHdlZWsgb2YgeWVhclxuICB3OiBmdW5jdGlvbiB3KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciB3ZWVrID0gZ2V0VVRDV2VlayhkYXRlLCBvcHRpb25zKTtcbiAgICBpZiAodG9rZW4gPT09ICd3bycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIEkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGlzb1dlZWsgPSBnZXRVVENJU09XZWVrKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvV2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdkbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDRGF0ZSgpLCB7XG4gICAgICAgIHVuaXQ6ICdkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IGZ1bmN0aW9uIEQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mWWVhciA9IGdldFVUQ0RheU9mWWVhcihkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdEbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwge1xuICAgICAgICB1bml0OiAnZGF5T2ZZZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF5T2ZZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2Ygd2Vla1xuICBFOiBmdW5jdGlvbiBFKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnRSc6XG4gICAgICBjYXNlICdFRSc6XG4gICAgICBjYXNlICdFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ0VFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ0VFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnRUVFRSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgZGF5IG9mIHdlZWtcbiAgZTogZnVuY3Rpb24gZShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbilcbiAgICAgIGNhc2UgJ2UnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2VlJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2VvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2VlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnZWVlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdlZWVlJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiBmdW5jdGlvbiBjKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoc2FtZSBhcyBpbiBgZWApXG4gICAgICBjYXNlICdjJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2NvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnY2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdjY2NjJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBJU08gZGF5IG9mIHdlZWtcbiAgaTogZnVuY3Rpb24gaShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgaXNvRGF5T2ZXZWVrID0gZGF5T2ZXZWVrID09PSAwID8gNyA6IGRheU9mV2VlaztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAyXG4gICAgICBjYXNlICdpJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcbiAgICAgIGNhc2UgJ2lpJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29EYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAybmRcbiAgICAgIGNhc2UgJ2lvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ2lpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnaWlpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdpaWlpJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0sIFBNLCBtaWRuaWdodCwgbm9vblxuICBiOiBmdW5jdGlvbiBiKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA9PT0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYic6XG4gICAgICBjYXNlICdiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2JiYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiYic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiBCKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA+PSAxNykge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ldmVuaW5nO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uYWZ0ZXJub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gNCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5tb3JuaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5pZ2h0O1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdCJzpcbiAgICAgIGNhc2UgJ0JCJzpcbiAgICAgIGNhc2UgJ0JCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2hvJykge1xuICAgICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMTI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ0hvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENIb3VycygpLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIEsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgaWYgKHRva2VuID09PSAnS28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFsxLTI0XVxuICBrOiBmdW5jdGlvbiBrKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7XG4gICAgaWYgKHRva2VuID09PSAna28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdtbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDTWludXRlcygpLCB7XG4gICAgICAgIHVuaXQ6ICdtaW51dGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5tKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnc28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ1NlY29uZHMoKSwge1xuICAgICAgICB1bml0OiAnc2Vjb25kJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5TKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGFsd2F5cyBgJ1onYClcbiAgWDogZnVuY3Rpb24gWChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuICdaJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ1gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgXG4gICAgICBjYXNlICdYWFhYJzpcbiAgICAgIGNhc2UgJ1hYJzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGBcbiAgICAgIGNhc2UgJ1hYWFhYJzpcbiAgICAgIGNhc2UgJ1hYWCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgeDogZnVuY3Rpb24geChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICd4JzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuICAgICAgY2FzZSAneHh4eCc6XG4gICAgICBjYXNlICd4eCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG4gICAgICBjYXNlICd4eHh4eCc6XG4gICAgICBjYXNlICd4eHgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChHTVQpXG4gIE86IGZ1bmN0aW9uIE8oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAnTyc6XG4gICAgICBjYXNlICdPTyc6XG4gICAgICBjYXNlICdPT08nOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnT09PTyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pXG4gIHo6IGZ1bmN0aW9uIHooZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAneic6XG4gICAgICBjYXNlICd6eic6XG4gICAgICBjYXNlICd6enonOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnenp6eic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIHQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gTWF0aC5mbG9vcihvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gVChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBvcmlnaW5hbERhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApO1xuICB2YXIgbWludXRlcyA9IGFic09mZnNldCAlIDYwO1xuICBpZiAobWludXRlcyA9PT0gMCkge1xuICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTtcbiAgfVxuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkge1xuICAgIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpO1xuICB9XG4gIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCksIDIpO1xuICB2YXIgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAidmFyIGRhdGVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIHRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gdGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAncHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHBwJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHZhciBtYXRjaFJlc3VsdCA9IHBhdHRlcm4ubWF0Y2goLyhQKykocCspPy8pIHx8IFtdO1xuICB2YXIgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgdmFyIHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07XG4gIGlmICghdGltZVBhdHRlcm4pIHtcbiAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZyk7XG4gIH1cbiAgdmFyIGRhdGVUaW1lRm9ybWF0O1xuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0LnJlcGxhY2UoJ3t7ZGF0ZX19JywgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcpKS5yZXBsYWNlKCd7e3RpbWV9fScsIHRpbWVMb25nRm9ybWF0dGVyKHRpbWVQYXR0ZXJuLCBmb3JtYXRMb25nKSk7XG59O1xudmFyIGxvbmdGb3JtYXR0ZXJzID0ge1xuICBwOiB0aW1lTG9uZ0Zvcm1hdHRlcixcbiAgUDogZGF0ZVRpbWVMb25nRm9ybWF0dGVyXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9uZ0Zvcm1hdHRlcnM7IiwgIi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkpO1xuICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIHJldHVybiBkYXRlLmdldFRpbWUoKSAtIHV0Y0RhdGUuZ2V0VGltZSgpO1xufSIsICJ2YXIgcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zID0gWydEJywgJ0REJ107XG52YXIgcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMgPSBbJ1lZJywgJ1lZWVknXTtcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgaWYgKHRva2VuID09PSAnWVlZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnRCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnREQnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9XG59IiwgInZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIHNlY29uZCcsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIHhTZWNvbmRzOiB7XG4gICAgb25lOiAnMSBzZWNvbmQnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIGhhbGZBTWludXRlOiAnaGFsZiBhIG1pbnV0ZScsXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBtaW51dGUnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICB4TWludXRlczoge1xuICAgIG9uZTogJzEgbWludXRlJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgaG91cicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhIb3Vyczoge1xuICAgIG9uZTogJzEgaG91cicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhEYXlzOiB7XG4gICAgb25lOiAnMSBkYXknLFxuICAgIG90aGVyOiAne3tjb3VudH19IGRheXMnXG4gIH0sXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB3ZWVrJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgeFdlZWtzOiB7XG4gICAgb25lOiAnMSB3ZWVrJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgYWJvdXRYTW9udGhzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBtb250aCcsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICB4TW9udGhzOiB7XG4gICAgb25lOiAnMSBtb250aCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIHhZZWFyczoge1xuICAgIG9uZTogJzEgeWVhcicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6ICdvdmVyIDEgeWVhcicsXG4gICAgb3RoZXI6ICdvdmVyIHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiAnYWxtb3N0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhbG1vc3Qge3tjb3VudH19IHllYXJzJ1xuICB9XG59O1xudmFyIGZvcm1hdERpc3RhbmNlID0gZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UodG9rZW4sIGNvdW50LCBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQ7XG4gIHZhciB0b2tlblZhbHVlID0gZm9ybWF0RGlzdGFuY2VMb2NhbGVbdG9rZW5dO1xuICBpZiAodHlwZW9mIHRva2VuVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZSgne3tjb3VudH19JywgY291bnQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gJ2luICcgKyByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAnIGFnbyc7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGlzdGFuY2U7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRm9ybWF0TG9uZ0ZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgLy8gVE9ETzogUmVtb3ZlIFN0cmluZygpXG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgIHZhciBmb3JtYXQgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkRm9ybWF0TG9uZ0ZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuL2luZGV4LmpzXCI7XG52YXIgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdFRUVFLCBNTU1NIGRvLCB5JyxcbiAgbG9uZzogJ01NTU0gZG8sIHknLFxuICBtZWRpdW06ICdNTU0gZCwgeScsXG4gIHNob3J0OiAnTU0vZGQveXl5eSdcbn07XG52YXIgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdoOm1tOnNzIGEgenp6eicsXG4gIGxvbmc6ICdoOm1tOnNzIGEgeicsXG4gIG1lZGl1bTogJ2g6bW06c3MgYScsXG4gIHNob3J0OiAnaDptbSBhJ1xufTtcbnZhciBkYXRlVGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbWVkaXVtOiAne3tkYXRlfX0sIHt7dGltZX19JyxcbiAgc2hvcnQ6ICd7e2RhdGV9fSwge3t0aW1lfX0nXG59O1xudmFyIGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdExvbmc7IiwgInZhciBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6ICdQJ1xufTtcbnZhciBmb3JtYXRSZWxhdGl2ZSA9IGZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlKHRva2VuLCBfZGF0ZSwgX2Jhc2VEYXRlLCBfb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UmVsYXRpdmVMb2NhbGVbdG9rZW5dO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFJlbGF0aXZlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZExvY2FsaXplRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRpcnR5SW5kZXgsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogJ3N0YW5kYWxvbmUnO1xuICAgIHZhciB2YWx1ZXNBcnJheTtcbiAgICBpZiAoY29udGV4dCA9PT0gJ2Zvcm1hdHRpbmcnICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciB3aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBkZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1t3aWR0aF0gfHwgYXJncy5mb3JtYXR0aW5nVmFsdWVzW2RlZmF1bHRXaWR0aF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgX3dpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1tfd2lkdGhdIHx8IGFyZ3MudmFsdWVzW19kZWZhdWx0V2lkdGhdO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2soZGlydHlJbmRleCkgOiBkaXJ0eUluZGV4O1xuICAgIC8vIEB0cy1pZ25vcmU6IEZvciBzb21lIHJlYXNvbiBUeXBlU2NyaXB0IGp1c3QgZG9uJ3Qgd2FudCB0byBtYXRjaCBpdCwgbm8gbWF0dGVyIGhvdyBoYXJkIHdlIHRyeS4gSSBjaGFsbGVuZ2UgeW91IHRvIHRyeSB0byByZW1vdmUgaXQhXG4gICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4XTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTG9jYWxpemVGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanNcIjtcbnZhciBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydCJywgJ0EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnQkMnLCAnQUQnXSxcbiAgd2lkZTogWydCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJ11cbn07XG52YXIgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbJzEnLCAnMicsICczJywgJzQnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnUTEnLCAnUTInLCAnUTMnLCAnUTQnXSxcbiAgd2lkZTogWycxc3QgcXVhcnRlcicsICcybmQgcXVhcnRlcicsICczcmQgcXVhcnRlcicsICc0dGggcXVhcnRlciddXG59O1xuXG4vLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG52YXIgbW9udGhWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydKJywgJ0YnLCAnTScsICdBJywgJ00nLCAnSicsICdKJywgJ0EnLCAnUycsICdPJywgJ04nLCAnRCddLFxuICBhYmJyZXZpYXRlZDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuICB3aWRlOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXVxufTtcbnZhciBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ10sXG4gIHNob3J0OiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXG4gIGFiYnJldmlhdGVkOiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuICB3aWRlOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J11cbn07XG52YXIgZGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH1cbn07XG52YXIgZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9XG59O1xudmFyIG9yZGluYWxOdW1iZXIgPSBmdW5jdGlvbiBvcmRpbmFsTnVtYmVyKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykge1xuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICAvLyBJZiBvcmRpbmFsIG51bWJlcnMgZGVwZW5kIG9uIGNvbnRleHQsIGZvciBleGFtcGxlLFxuICAvLyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCBncmFtbWF0aWNhbCBnZW5kZXJzLFxuICAvLyB1c2UgYG9wdGlvbnMudW5pdGAuXG4gIC8vXG4gIC8vIGB1bml0YCBjYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RhdGUnLCAnZGF5T2ZZZWFyJyxcbiAgLy8gJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLlxuXG4gIHZhciByZW0xMDAgPSBudW1iZXIgJSAxMDA7XG4gIGlmIChyZW0xMDAgPiAyMCB8fCByZW0xMDAgPCAxMCkge1xuICAgIHN3aXRjaCAocmVtMTAwICUgMTApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdzdCc7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnbmQnO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3JkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bWJlciArICd0aCc7XG59O1xudmFyIGxvY2FsaXplID0ge1xuICBvcmRpbmFsTnVtYmVyOiBvcmRpbmFsTnVtYmVyLFxuICBlcmE6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBlcmFWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IGZ1bmN0aW9uIGFyZ3VtZW50Q2FsbGJhY2socXVhcnRlcikge1xuICAgICAgcmV0dXJuIHF1YXJ0ZXIgLSAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogbW9udGhWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogJ3dpZGUnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxpemU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGg7XG4gICAgdmFyIG1hdGNoUGF0dGVybiA9IHdpZHRoICYmIGFyZ3MubWF0Y2hQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5tYXRjaFBhdHRlcm5zW2FyZ3MuZGVmYXVsdE1hdGNoV2lkdGhdO1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChtYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG4gICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkocGFyc2VQYXR0ZXJucykgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSkgOiBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59XG5mdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkgJiYgcHJlZGljYXRlKG9iamVjdFtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoUGF0dGVybkZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MubWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7XG4gICAgaWYgKCFwYXJzZVJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKHBhcnNlUmVzdWx0WzBdKSA6IHBhcnNlUmVzdWx0WzBdO1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59IiwgImltcG9ydCBidWlsZE1hdGNoRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaEZuL2luZGV4LmpzXCI7XG5pbXBvcnQgYnVpbGRNYXRjaFBhdHRlcm5GbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuL2luZGV4LmpzXCI7XG52YXIgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKHRofHN0fG5kfHJkKT8vaTtcbnZhciBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcbnZhciBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGJ8YSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGJcXC4/XFxzP2NcXC4/fGJcXC4/XFxzP2NcXC4/XFxzP2VcXC4/fGFcXC4/XFxzP2RcXC4/fGNcXC4/XFxzP2VcXC4/KS9pLFxuICB3aWRlOiAvXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2lcbn07XG52YXIgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL15iL2ksIC9eKGF8YykvaV1cbn07XG52YXIgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaVxufTtcbnZhciBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV1cbn07XG52YXIgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2lcbn07XG52YXIgcGFyc2VNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXmovaSwgL15mL2ksIC9ebS9pLCAvXmEvaSwgL15tL2ksIC9eai9pLCAvXmovaSwgL15hL2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXSxcbiAgYW55OiBbL15qYS9pLCAvXmYvaSwgL15tYXIvaSwgL15hcC9pLCAvXm1heS9pLCAvXmp1bi9pLCAvXmp1bC9pLCAvXmF1L2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXVxufTtcbnZhciBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pXG59O1xudmFyIHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXVxufTtcbnZhciBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaVxufTtcbnZhciBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL15hL2ksXG4gICAgcG06IC9ecC9pLFxuICAgIG1pZG5pZ2h0OiAvXm1pL2ksXG4gICAgbm9vbjogL15uby9pLFxuICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksXG4gICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksXG4gICAgZXZlbmluZzogL2V2ZW5pbmcvaSxcbiAgICBuaWdodDogL25pZ2h0L2lcbiAgfVxufTtcbnZhciBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKHZhbHVlKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH0pLFxuICBlcmE6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2soaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCArIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICdhbnknLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbWF0Y2g7IiwgImltcG9ydCBmb3JtYXREaXN0YW5jZSBmcm9tIFwiLi9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0TG9uZyBmcm9tIFwiLi9fbGliL2Zvcm1hdExvbmcvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRSZWxhdGl2ZSBmcm9tIFwiLi9fbGliL2Zvcm1hdFJlbGF0aXZlL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9jYWxpemUgZnJvbSBcIi4vX2xpYi9sb2NhbGl6ZS9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoIGZyb20gXCIuL19saWIvbWF0Y2gvaW5kZXguanNcIjtcbi8qKlxuICogQHR5cGUge0xvY2FsZX1cbiAqIEBjYXRlZ29yeSBMb2NhbGVzXG4gKiBAc3VtbWFyeSBFbmdsaXNoIGxvY2FsZSAoVW5pdGVkIFN0YXRlcykuXG4gKiBAbGFuZ3VhZ2UgRW5nbGlzaFxuICogQGlzby02MzktMiBlbmdcbiAqIEBhdXRob3IgU2FzaGEgS29zcyBbQGtvc3Nub2NvcnBde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9rb3Nzbm9jb3JwfVxuICogQGF1dGhvciBMZXNoYSBLb3NzIFtAbGVzaGFrb3NzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbGVzaGFrb3NzfVxuICovXG52YXIgbG9jYWxlID0ge1xuICBjb2RlOiAnZW4tVVMnLFxuICBmb3JtYXREaXN0YW5jZTogZm9ybWF0RGlzdGFuY2UsXG4gIGZvcm1hdExvbmc6IGZvcm1hdExvbmcsXG4gIGZvcm1hdFJlbGF0aXZlOiBmb3JtYXRSZWxhdGl2ZSxcbiAgbG9jYWxpemU6IGxvY2FsaXplLFxuICBtYXRjaDogbWF0Y2gsXG4gIG9wdGlvbnM6IHtcbiAgICB3ZWVrU3RhcnRzT246IDAgLyogU3VuZGF5ICovLFxuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMVxuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxlOyIsICJpbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vLi4vbG9jYWxlL2VuLVVTL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0TG9jYWxlOyIsICJpbXBvcnQgaXNWYWxpZCBmcm9tIFwiLi4vaXNWYWxpZC9pbmRleC5qc1wiO1xuaW1wb3J0IHN1Yk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9uZ0Zvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuLCBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4sIHRocm93UHJvdGVjdGVkRXJyb3IgfSBmcm9tIFwiLi4vX2xpYi9wcm90ZWN0ZWRUb2tlbnMvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qc1wiOyAvLyBUaGlzIFJlZ0V4cCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cyBzZXBhcmF0ZWQgYnkgYHxgOlxuLy8gLSBbeVlRcU1Md0lkRGVjaWhIS2ttc11vIG1hdGNoZXMgYW55IGF2YWlsYWJsZSBvcmRpbmFsIG51bWJlciB0b2tlblxuLy8gICAob25lIG9mIHRoZSBjZXJ0YWluIGxldHRlcnMgZm9sbG93ZWQgYnkgYG9gKVxuLy8gLSAoXFx3KVxcMSogbWF0Y2hlcyBhbnkgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIGxldHRlclxuLy8gLSAnJyBtYXRjaGVzIHR3byBxdW90ZSBjaGFyYWN0ZXJzIGluIGEgcm93XG4vLyAtICcoJyd8W14nXSkrKCd8JCkgbWF0Y2hlcyBhbnl0aGluZyBzdXJyb3VuZGVkIGJ5IHR3byBxdW90ZSBjaGFyYWN0ZXJzICgnKSxcbi8vICAgZXhjZXB0IGEgc2luZ2xlIHF1b3RlIHN5bWJvbCwgd2hpY2ggZW5kcyB0aGUgc2VxdWVuY2UuXG4vLyAgIFR3byBxdW90ZSBjaGFyYWN0ZXJzIGRvIG5vdCBlbmQgdGhlIHNlcXVlbmNlLlxuLy8gICBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBzaW5nbGUgcXVvdGVcbi8vICAgdGhlbiB0aGUgc2VxdWVuY2Ugd2lsbCBjb250aW51ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG4vLyAtIC4gbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciB1bm1hdGNoZWQgYnkgcHJldmlvdXMgcGFydHMgb2YgdGhlIFJlZ0V4cHNcbnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG4vLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG52YXIgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcbnZhciBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG52YXIgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbnZhciB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG5cbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqID4gXHUyNkEwXHVGRTBGIFBsZWFzZSBub3RlIHRoYXQgdGhlIGBmb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKiAoc2VlIHRoZSBsYXN0IGV4YW1wbGUpXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDcgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBBY2NlcHRlZCBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDB0aCwgMTd0aCAgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgMjAxN3RoICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgUiAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSICAgICAgfCAtNDMsIDAwLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAwLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAwLCAwMDAxLCAxOTAwLCAyMDE3ICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUsNyB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCB1ICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCA3ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhICAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWEgICAgIHwgYW0sIHBtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCBiLi5iYiAgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiICAgICB8IGFtLCBwbSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmIgICAgfCBhLm0uLCBwLm0uLCBub29uLCBtaWRuaWdodCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiYiAgIHwgYSwgcCwgbiwgbWkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgIHwgQi4uQkJCICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkIgICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCQiAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgIHwgaCAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAxMnRoICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaCAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhvICAgICAgfCAwdGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgIHwgSyAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAwdGggICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLSyAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgIHwgayAgICAgICB8IDI0LCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtvICAgICAgfCAyNHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrayAgICAgIHwgMjQsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbSAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbSAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcyAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcyAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDEsIC4uLiwgOTk5ICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICAgfCBPLi4uT09PIHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT09PTyAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pICB8IHouLi56enogfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCA2ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB6enp6ICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiw2ICAgfFxuICogfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgIHwgdCAgICAgICB8IDUxMjk2OTUyMCAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR0ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8IFAgICAgICAgfCAwNC8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUCAgICAgIHwgQXByIDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQICAgICB8IEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFAgICAgfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcCAgICAgfCAxMjowMDowMCBBTSBHTVQrMiAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHBwICAgIHwgMTI6MDA6MDAgQU0gR01UKzAyOjAwICAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBDb21iaW5hdGlvbiBvZiBkYXRlIGFuZCB0aW1lICAgIHwgUHAgICAgICB8IDA0LzI5LzE0NTMsIDEyOjAwIEFNICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQcHAgICAgfCBBcHIgMjksIDE0NTMsIDEyOjAwOjAwIEFNICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBwcHAgIHwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUHBwcHB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICB8IDIsNyAgIHxcbiAqIE5vdGVzOlxuICogMS4gXCJGb3JtYXR0aW5nXCIgdW5pdHMgKGUuZy4gZm9ybWF0dGluZyBxdWFydGVyKSBpbiB0aGUgZGVmYXVsdCBlbi1VUyBsb2NhbGVcbiAqICAgIGFyZSB0aGUgc2FtZSBhcyBcInN0YW5kLWFsb25lXCIgdW5pdHMsIGJ1dCBhcmUgZGlmZmVyZW50IGluIHNvbWUgbGFuZ3VhZ2VzLlxuICogICAgXCJGb3JtYXR0aW5nXCIgdW5pdHMgYXJlIGRlY2xpbmVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxhbmd1YWdlXG4gKiAgICBpbiB0aGUgY29udGV4dCBvZiBhIGRhdGUuIFwiU3RhbmQtYWxvbmVcIiB1bml0cyBhcmUgYWx3YXlzIG5vbWluYXRpdmUgc2luZ3VsYXI6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqIDIuIEFueSBzZXF1ZW5jZSBvZiB0aGUgaWRlbnRpY2FsIGxldHRlcnMgaXMgYSBwYXR0ZXJuLCB1bmxlc3MgaXQgaXMgZXNjYXBlZCBieVxuICogICAgdGhlIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIChzZWUgYmVsb3cpLlxuICogICAgSWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIGxpc3RlZCBpbiB0YWJsZSAoZS5nLiBgRUVFRUVFRUVFRUVgKVxuICogICAgdGhlIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRlZmF1bHQgcGF0dGVybiBmb3IgdGhpcyB1bml0LCB1c3VhbGx5XG4gKiAgICB0aGUgbG9uZ2VzdCBvbmUgKGluIGNhc2Ugb2YgSVNPIHdlZWtkYXlzLCBgRUVFRWApLiBEZWZhdWx0IHBhdHRlcm5zIGZvciB1bml0c1xuICogICAgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU0nKSAvLz0+ICdOb3YnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NJykgLy89PiAnTidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqIDMuIFNvbWUgcGF0dGVybnMgY291bGQgYmUgdW5saW1pdGVkIGxlbmd0aCAoc3VjaCBhcyBgeXl5eXl5eXlgKS5cbiAqICAgIFRoZSBvdXRwdXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB6ZXJvcyB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAneXl5eXl5eXknKSAvLz0+ICcwMDAwMjAxNydgXG4gKlxuICogNC4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNS4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAqICAgIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZDpcbiAqXG4gKiAgICB8IFllYXIgfCBgeXlgIHwgYHV1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gKiAgICB8IDEgICAgfCAgIDAxIHwgICAwMSB8XG4gKiAgICB8IDE0ICAgfCAgIDE0IHwgICAxNCB8XG4gKiAgICB8IDM3NiAgfCAgIDc2IHwgIDM3NiB8XG4gKiAgICB8IDE0NTMgfCAgIDUzIHwgMTQ1MyB8XG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbZ2V0SVNPV2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0SVNPV2Vla1llYXJ9XG4gKiAgICBhbmQgW2dldFdlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldFdlZWtZZWFyfSkuXG4gKlxuICogNi4gU3BlY2lmaWMgbm9uLWxvY2F0aW9uIHRpbWV6b25lcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGluIGBkYXRlLWZuc2AsXG4gKiAgICBzbyByaWdodCBub3cgdGhlc2UgdG9rZW5zIGZhbGwgYmFjayB0byBHTVQgdGltZXpvbmVzLlxuICpcbiAqIDcuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYHRgOiBzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgVGA6IG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogOC4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA5LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIGRheXMgb2YgdGhlIG1vbnRoLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIHRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIgdG9rZW5zIGBZWWAgYW5kIGBZWVlZYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSBkYXkgb2YgeWVhciB0b2tlbnMgYERgIGFuZCBgRERgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRMb25nYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgN1xuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdChkaXJ0eURhdGUsIGRpcnR5Rm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfb3B0aW9ucyRsb2NhbGUsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlMiwgX29wdGlvbnMkbG9jYWxlMiRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIsIF9yZWY1LCBfcmVmNiwgX3JlZjcsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlMywgX29wdGlvbnMkbG9jYWxlMyRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0O1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGZvcm1hdFN0ciA9IFN0cmluZyhkaXJ0eUZvcm1hdFN0cik7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBsb2NhbGUgPSAoX3JlZiA9IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRsb2NhbGUgIT09IHZvaWQgMCA/IF9vcHRpb25zJGxvY2FsZSA6IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IGRlZmF1bHRMb2NhbGU7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYyID0gKF9yZWYzID0gKF9yZWY0ID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiRvcHRpID0gX29wdGlvbnMkbG9jYWxlMi5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTIkb3B0aS5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWY0ICE9PSB2b2lkIDAgPyBfcmVmNCA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWY1ID0gKF9yZWY2ID0gKF9yZWY3ID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyRvcHRpID0gX29wdGlvbnMkbG9jYWxlMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTMkb3B0aS53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY3ICE9PSB2b2lkIDAgPyBfcmVmNyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjYgIT09IHZvaWQgMCA/IF9yZWY2IDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0LndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjUgIT09IHZvaWQgMCA/IF9yZWY1IDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIGlmICghbG9jYWxlLmxvY2FsaXplKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gbG9jYWxpemUgcHJvcGVydHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5mb3JtYXRMb25nKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gZm9ybWF0TG9uZyBwcm9wZXJ0eScpO1xuICB9XG4gIHZhciBvcmlnaW5hbERhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIH1cblxuICAvLyBDb252ZXJ0IHRoZSBkYXRlIGluIHN5c3RlbSB0aW1lem9uZSB0byB0aGUgc2FtZSBkYXRlIGluIFVUQyswMDowMCB0aW1lem9uZS5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBVVEMgZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQsIGxvY2FsZXMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlbS5cbiAgLy8gU2VlIGFuIGlzc3VlIGFib3V0IFVUQyBmdW5jdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG4gIHZhciB0aW1lem9uZU9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlKTtcbiAgdmFyIHV0Y0RhdGUgPSBzdWJNaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlLCB0aW1lem9uZU9mZnNldCk7XG4gIHZhciBmb3JtYXR0ZXJPcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbjogd2Vla1N0YXJ0c09uLFxuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIF9vcmlnaW5hbERhdGU6IG9yaWdpbmFsRGF0ZVxuICB9O1xuICB2YXIgcmVzdWx0ID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICdwJyB8fCBmaXJzdENoYXJhY3RlciA9PT0gJ1AnKSB7XG4gICAgICB2YXIgbG9uZ0Zvcm1hdHRlciA9IGxvbmdGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgIHJldHVybiBcIidcIjtcbiAgICB9XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCInXCIpIHtcbiAgICAgIHJldHVybiBjbGVhbkVzY2FwZWRTdHJpbmcoc3Vic3RyaW5nKTtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdHRlcih1dGNEYXRlLCBzdWJzdHJpbmcsIGxvY2FsZS5sb2NhbGl6ZSwgZm9ybWF0dGVyT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChmaXJzdENoYXJhY3Rlci5tYXRjaCh1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCcgKyBmaXJzdENoYXJhY3RlciArICdgJyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIHZhciBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICByZXR1cm4gbWF0Y2hlZFsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwLCBcIidcIik7XG59IiwgImV4cG9ydCBjb25zdCBwb2ludHNOb3RlTWFqdXJpdHkgPSAxMDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNNYWp1cml0eSA9IDEwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgPSA1MDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgPSAyMDAwO1xyXG5leHBvcnQgY29uc3QgYXZhdGFySW5pdENvbnRlbnQgPSAgYCMgQXZhdGFyXHJcblxyXG58ICAgICAgICB8ICAgICB8XHJcbnwgLS0tLS0tIHwgLS0tIHxcclxufCBMZXZlbCAgfCAwICAgIHxcclxufCBQb2ludHMgfCAwICAgIHxcclxuXmxldmVsQW5kUG9pbnRzXHRcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW0V4cHJpcmllbmNlXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXHJcbiAgICBkYXRhOiBbMTAwMF1cclxueE1pbjogMFxyXG54TWF4OiAxMDAwXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XHJcbnwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0gfFxyXG58ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqMCoqIHxcclxuXmJvb3N0ZXJGYWN0b3JcclxufCAgICAgICAgICAgICB8ICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLSB8IC0tLSB8IC0tLS0tIHxcclxufCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKiowLzIqKiB8XHJcbl5kYWlseU5vdGVzQ2hhbGxlbmdlXHJcbnwgIHwgICAgIHx8XHJcbnwgLS0tLSB8IC0tLSB8IC0tLSB8XHJcbnwgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKjAvNyoqICAgfFxyXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW05vdGVzXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogZGF5cyBkb25lIGluIGEgcm93XHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XHJcbiAgICBkYXRhOiBbN11cclxueE1pbjogMFxyXG54TWF4OiA3XHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwiZGF5c1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58IExldmVsIHwgQ291bnQgfFxyXG58IDotLS06IHwgOi0tLTogfFxyXG58IE1hanVyaXR5IDUgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs1LCAnNScsICc1XHUyN0ExXHVGRTBGJywgJzVcdTJCMDdcdUZFMEYnLCAnNVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDQgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs0LCAnNCcsICc0XHUyN0ExXHVGRTBGJywgJzRcdTJCMDdcdUZFMEYnLCAnNFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDMgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFszLCAnMycsICczXHUyN0ExXHVGRTBGJywgJzNcdTJCMDdcdUZFMEYnLCAnM1x1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDIgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsyLCAnMicsICcyXHUyN0ExXHVGRTBGJywgJzJcdTJCMDdcdUZFMEYnLCAnMlx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDEgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsxLCAnMScsICcxXHUyN0ExXHVGRTBGJywgJzFcdTJCMDdcdUZFMEYnLCAnMVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDAgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFswLCAnMCcsICcwXHUyN0ExXHVGRTBGJywgJzBcdTJCMDdcdUZFMEYnLCAnMFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG5cclxuXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFswLCAwLCAwXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogbW9kaWZpZWRcclxuICAgIGRhdGE6IFswLCAwLCAwXVxyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDgwICVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxueVRpdGxlOiBcIk51bWJlciBvZiBOb3Rlc1wiXHJcbnhUaXRsZTogXCJNb250aHNcIlxyXG54TWluOiAwXHJcblxcYFxcYFxcYFxyXG5eQ2hhcnRNb250aFxyXG5cclxuXHJcbiMjIyBCYWRnZXNcclxuIyMjIyBhY2hpZXZlZFxyXG5cclxuXHJcbiMjIyMgb3V0c3RhbmRpbmdcclxubGV2ZWwgNTogKkVubGlnaHRlbmVkIE5vdmljZSpcclxubGV2ZWwgMTA6ICpDdXJpb3VzIENvbm5vaXNzZXVyKlxyXG5sZXZlbCAyMDogKkJyYWluaWFjIFRyYWlsYmxhemVyKlxyXG5sZXZlbCAyNzogKlNjaG9sYXJseSBUcmFpbGJsYXplcipcclxubGV2ZWwgMzU6ICpJbmZvIE5pbmphIE1hc3RlcipcclxubGV2ZWwgNDI6ICpXaXNlIE93bCBHdXJ1KlxyXG5sZXZlbCA1MDogKkVpbnN0ZWluIEluY2FybmF0ZSpcclxubGV2ZWwgNjA6ICpNYXN0ZXJtaW5kIFNhZ2UqXHJcbmxldmVsIDc1OiAqQ2VyZWJyYWwgTWFlc3RybypcclxubGV2ZWwgODI6ICpaZW4gS25vd2xlZGdlIEtlZXBlcipcclxubGV2ZWwgOTA6ICpHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQqXHJcbmxldmVsIDEwMDogKk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nKlxyXG5cclxuXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNSoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA1IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA0KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDQgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAzXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAzIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDFcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDEgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAwXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAwIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuYDtcclxuIiwgImltcG9ydCB7IFRGaWxlLCBBcHAsIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZVByb2dyZXNzaXZlU3VtbWFyaXphdGlvbihjaGFyQ291bnRUb3RhbDogbnVtYmVyLCBsYXllcjJjb3VudDogbnVtYmVyLCBsYXllcjNjb3VudDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRjb25zdCBwZXJjZW50TGF5ZXIyID0gbGF5ZXIyY291bnQgKiAxMDAgLyBjaGFyQ291bnRUb3RhbDtcclxuICAgIGNvbnN0IHBlcmNlbnRMYXllcjMgPSBsYXllcjNjb3VudCAqIDEwMCAvIGxheWVyMmNvdW50O1xyXG5cdHZhciBsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0dmFyIGxheWVyM21hanVyaXR5ID0gMDtcclxuXHR2YXIgbWFqdXJpdHkgPSAwO1xyXG5cdGlmIChjaGFyQ291bnRUb3RhbCA8IDMwMDApIHtcclxuXHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdC8vY29uc29sZS5sb2coYE5vdGUgaXMgbm90IGxvbmcgZW5vdWdoIHRvIGdldCBpbnRvIGNhbGN1bGF0aW9uIGZvciBtYWp1cml0eS4gVGhlIHRvdGFsIGNoYXJhY3RlciBjb3VudCBpcyAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRpZiAocGVyY2VudExheWVyMiA9PSAwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDMwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjNjb3VudCA9PSAwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjJtYWp1cml0eSA9PSAxICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSAyICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA+PSAzICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmICgobGF5ZXIybWFqdXJpdHkgPT0gMyB8fCBsYXllcjJtYWp1cml0eSA9PSA0KSAmJiAobGF5ZXIzbWFqdXJpdHkgPT0gNCB8fCBsYXllcjNtYWp1cml0eSA9PSA1KSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDUgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gNSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRcclxuXHQvL2NvbnNvbGUubG9nKGBsYXllcjJtYWp1cml0eTogJHtsYXllcjJtYWp1cml0eX0gXFx0bGF5ZXIzbWFqdXJpdHk6ICR7bGF5ZXIzbWFqdXJpdHl9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYHBlcmNlbnRMYXllcjI6ICR7cGVyY2VudExheWVyMn0gXFx0cGVyY2VudExheWVyMzogJHtwZXJjZW50TGF5ZXIzfSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBjaGFyQ291bnRUb3RhbDogJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHRyZXR1cm4gbWFqdXJpdHk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgbGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKTogeyBjaGFyQ291bnQ6IG51bWJlcjsgaGlnaGxpZ2h0ZWRDb3VudDogbnVtYmVyOyBib2xkQ291bnQ6IG51bWJlciB9IHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblxyXG5cdC8vIGNhbGN1bGF0ZSBMYXllciAyICYgMyBMZW5ndGhcclxuXHJcblx0Ly8gQ291bnQgdGhlIGhpZ2hsaWdodGVkIGFuZCBib2xkIGNoYXJhY3RlcnNcclxuXHRsZXQgaGlnaGxpZ2h0ZWRDb3VudCA9IDA7XHJcblx0bGV0IGJvbGRDb3VudCA9IDA7XHJcbiAgXHJcblx0dmFyIGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR2YXIgbGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHQvLyB0byBoYXZlIHRoZSByZWcgZXggY29ycmVjdC4gb3RoZXJ3aXNlIGl0IHdpbGwgZ2V0IHN0dWMgd2l0aCAqKi5cclxuXHRpZihsYXllcjMgPT0gJyoqJyl7XHJcblx0XHRsYXllcjMgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0XHRsYXllcjJleGNsdWRlID0gJz0nXHJcblx0fVxyXG5cdGlmKGxheWVyMiA9PSAnKionKXtcclxuXHRcdGxheWVyMiA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICc9J1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICdcXFxcKidcclxuXHR9XHJcbiAgXHRcclxuXHJcblx0Y29uc3QgaGlnaGxpZ2h0UmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyMn1bXiR7bGF5ZXIyZXhjbHVkZX1dKyR7bGF5ZXIyfWAsIFwiZ1wiKTtcclxuICAgIGNvbnN0IGJvbGRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIzfVteJHtsYXllcjNleGNsdWRlfV0rJHtsYXllcjN9YCwgXCJnXCIpO1xyXG4gIFxyXG5cdC8vIENvdW50IGhpZ2hsaWdodGVkIGNoYXJhY3RlcnNcclxuXHRjb25zdCBoaWdobGlnaHRlZE1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKGhpZ2hsaWdodFJlZ2V4KTtcclxuXHRpZiAoaGlnaGxpZ2h0ZWRNYXRjaGVzKSB7XHJcblx0ICBoaWdobGlnaHRlZENvdW50ID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGhpZ2hsaWdodGVkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnPT0nXHJcblx0ICAvLyBmaXJzdCB0YWtlIHRoZSBsYXllcjIgKGhpZ2hsaWdodGVkQ291bnQpIGFuZCBydW4gb24gdGhpcyB0aGUgJ2JvbGRSZWdleCdcclxuXHQgIC8vIENvdW50IGJvbGQgY2hhcmFjdGVyc1xyXG5cdCAgY29uc3QgbGF5ZXIyU3RyaW5nID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIik7XHJcblx0ICBjb25zdCBib2xkTWF0Y2hlcyA9IGxheWVyMlN0cmluZy5tYXRjaChib2xkUmVnZXgpO1xyXG5cdCAgaWYgKGJvbGRNYXRjaGVzKSB7XHJcblx0ICAgIGJvbGRDb3VudCA9IGJvbGRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGJvbGRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICcqKidcclxuXHQgIH1cclxuXHR9XHJcbiAgXHJcblx0XHJcblx0XHJcbiAgXHJcblx0cmV0dXJuIHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfTtcclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxldmVsT2ZNYXR1cml0eShub3RlTGVuZ3RoOiBudW1iZXIsIGxlbmd0aE9mVGl0bGU6IG51bWJlciwgSW5saW5rczogbnVtYmVyLCBvdXRnb2luZ0xpbmtzOiBudW1iZXIsIHByb2dyZXNzaXZlU3VtTWFqdXJpdHk6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG5vdGVMZW5ndGg6ICR7bm90ZUxlbmd0aH1cXHRsZW5ndGhPZlRpdGxlOiAke2xlbmd0aE9mVGl0bGV9XFx0SW5saW5rczogJHtJbmxpbmtzfVxcdG91dGdvaW5nTGlua3M6ICR7b3V0Z29pbmdMaW5rc31gKVxyXG5cdFxyXG5cdC8vIGRlY2lkZSBpZiBub3RlTGVuZ3RoLW1hanVyaXR5IG9yIHByb2dyZXNzaXZlU3VtLW1hanVyaXR5IHNoYWxsIGJlIHVzZWRcclxuXHR2YXIgbGVuZ3RoTWFqdXJpdHkgPSAwO1xyXG5cdGlmKG5vdGVMZW5ndGggPj0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eSkge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBub3RlTGVuZ3RoO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IHByb2dyZXNzaXZlU3VtTWFqdXJpdHk7XHJcblx0fVxyXG5cdFxyXG5cdGNvbnN0IHRvdGFsV2VpZ2h0IDogbnVtYmVyID0gbGVuZ3RoTWFqdXJpdHkgKyBsZW5ndGhPZlRpdGxlICsgSW5saW5rcyArIG91dGdvaW5nTGlua3M7XHJcblx0Y29uc3QgYXZlcmFnZVdlaWdodCA9IHRvdGFsV2VpZ2h0IC8gNTtcclxuXHQvLyBjb25zb2xlLmxvZyhgdG90YWxXZWlnaHQ6ICR7dG90YWxXZWlnaHR9XFx0YXZlcmFnZVdlaWdodDogJHthdmVyYWdlV2VpZ2h0fWApXHJcblx0aWYgKGF2ZXJhZ2VXZWlnaHQgPCAwLjUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAxKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMikge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzLjUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSA0KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVPdXRsaW5rcyhvdXRsaW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgb3V0bGlua3M6ICR7b3V0bGlua3N9YClcclxuXHRpZiAob3V0bGlua3MgPCAyKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMykge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA5KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMikge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlSW5saW5rcyhudW1JbmxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vdmFyIHByb3plbnRJbmxpbmtzID0gbnVtSW5saW5rcyAqIDEwMCAvIG51bUFsbEZpbGVzO1xyXG5cdC8vY29uc29sZS5sb2coYG51bUlubGlua3M6ICR7bnVtSW5saW5rc31cXHRudW1BbGxGaWxlczogJHtudW1BbGxGaWxlc31cXHRwcm96ZW50SW5saW5rczogJHtwcm96ZW50SW5saW5rc31gKVxyXG5cdC8qaWYgKHByb3plbnRJbmxpbmtzIDwgMC4wMDUgfHwgcHJvemVudElubGlua3MgPiAwLjEpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSAqLyBpZiAobnVtSW5saW5rcyA9PSAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA0KSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA4KSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTYpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA+PSAxNiAmJiBudW1JbmxpbmtzIDwgNTAwICkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlRGlyZWN0aW9uKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCByYXRpbmcgPSBcIlwiXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA+IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwN1x1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDZcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID09IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MjdBMVx1RkUwRlwiXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXCJcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGVuZ3RoRmlsZW5hbWUoZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDMwKSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCA4MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTAwKSB7XHJcblx0cmV0dXJuIDM7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxNTApIHtcclxuXHRyZXR1cm4gNTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE5MCkge1xyXG5cdHJldHVybiA0O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjEwKSB7XHJcblx0cmV0dXJuIDI7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyNTApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2Uge1xyXG5cdHJldHVybiAwO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTm90ZUxlbmd0aChjb250ZW5sZW5ndGg6IG51bWJlcik6IG51bWJlciB7XHJcblx0aWYgKGNvbnRlbmxlbmd0aCA8IDIwMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCA1NTApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTAwMCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMjAwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDIwMDApIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjUwMCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAzMDAwKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWJlck9mT3V0bGlua3MoYWN0aXZlRmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG5cdC8vIGNvbnN0IGFjdGl2ZUZpbGU6IFRGaWxlIHwgbnVsbCA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG5cdGlmICghYWN0aXZlRmlsZSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cdGNvbnN0IGlubGlua3MgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoYWN0aXZlRmlsZSk/LmxpbmtzO1xyXG5cdHJldHVybiBpbmxpbmtzID8gT2JqZWN0LmtleXMoaW5saW5rcykubGVuZ3RoIDogMDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblx0cmV0dXJuIGNoYXJDb3VudDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzX3NpbmdsZShmaWxlX3BhdGg6IHN0cmluZywgdmF1bHRfcGF0aDogc3RyaW5nKTogbnVtYmVyIHtcclxuXHQvLyBHZXQgdGhlIGZpbGVuYW1lIGFuZCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUgd2UncmUgY291bnRpbmcgbGlua3MgdG9cclxuXHRjb25zdCBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZV9wYXRoKTtcclxuXHRjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZmlsZV9wYXRoKTtcclxuXHJcblx0Ly8gQ3JlYXRlIGEgc2V0IHRvIGhvbGQgYWxsIHRoZSBmaWxlcyB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3QgbGlua2luZ19maWxlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcblxyXG5cdC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgZmlsZXMgaW4gdGhlIHZhdWx0IGRpcmVjdG9yeSB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3Qgd2Fsa1N5bmMgPSAoZGlyOiBzdHJpbmcsIGZpbGVsaXN0OiBzdHJpbmdbXSkgPT4ge1xyXG5cdFx0Y29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpO1xyXG5cdFx0ZmlsZWxpc3QgPSBmaWxlbGlzdCB8fCBbXTtcclxuXHRcdGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRpZiAoZnMuc3RhdFN5bmMocGF0aC5qb2luKGRpciwgZmlsZSkpLmlzRGlyZWN0b3J5KCkpIHtcclxuXHRcdFx0XHRmaWxlbGlzdCA9IHdhbGtTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBmaWxlbGlzdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWdub3JlIG5vbi1tZCBmaWxlcyBhbmQgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGlmICghZmlsZS5lbmRzV2l0aChcIi5tZFwiKSB8fCBmaWxlID09PSBmaWxlbmFtZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmVhZCB0aGUgZmlsZSBhbmQgbG9vayBmb3IgbGlua3MgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcclxuXHRcdFx0XHRkYXRhLnNwbGl0KCdcXG4nKS5mb3JFYWNoKChsaW5lOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdGlmIChsaW5lLmluY2x1ZGVzKGBbWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1dYCkgfHwgbGluZS5pbmNsdWRlcyhgWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1gKSkge1xyXG5cdFx0XHRcdFx0XHQvLyBXZSBmb3VuZCBhIGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlIVxyXG5cdFx0XHRcdFx0XHRsaW5raW5nX2ZpbGVzLmFkZChwYXRoLnJlbGF0aXZlKGRpcmVjdG9yeSwgcGF0aC5qb2luKGRpciwgZmlsZSkpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gZmlsZWxpc3Q7XHJcblx0fTtcclxuXHJcblx0d2Fsa1N5bmModmF1bHRfcGF0aCwgW10pO1xyXG5cclxuXHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBhcmUgbWVudGlvbmluZyB0aGUgaW5wdXQgZmlsZVxyXG5cdHJldHVybiBsaW5raW5nX2ZpbGVzLnNpemU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rcyhmaWxlOiBURmlsZSk6IG51bWJlciB7XHJcbiAgICBjb25zdCB7IGFwcDogeyBtZXRhZGF0YUNhY2hlOiB7IHJlc29sdmVkTGlua3MgfSB9IH0gPSB0aGlzO1xyXG4gICAgY29uc3QgeyBwYXRoIH0gPSBmaWxlO1xyXG5cclxuICAgIGNvbnN0IHN1bUlubGlua3MgPSBPYmplY3QudmFsdWVzKHJlc29sdmVkTGlua3MpXHJcbiAgICAgICAgLm1hcCgodmFsOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9KSA9PiB2YWxbcGF0aF0gPz8gMClcclxuICAgICAgICAucmVkdWNlKChsZWZ0LCByaWdodCkgPT4gbGVmdCArIHJpZ2h0LCAwKTtcclxuXHJcbiAgICByZXR1cm4gc3VtSW5saW5rcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlQ291bnRNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+PiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHRcclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdFxyXG5cclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHRcclxuICAgIGNvbnN0IGZpbGVDb3VudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHJcblx0XHRjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG4gICAgICAgIH1cclxuXHRcdFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWxlQ291bnRNYXA7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxURmlsZVtdPiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkU3Vic3RyaW5nczogJHtleGNsdWRlZFN1YnN0cmluZ3N9YClcclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZEZvbGRlcnM6ICR7ZXhjbHVkZWRGb2xkZXJzfWApXHRcclxuICAgIGxldCBmaWxlQXJyYXk6IFRGaWxlW10gPSBbXTtcclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgZmlsZS5wYXRoOiAke2ZpbGUucGF0aH1gKVxyXG5cdFx0aWYgKCghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSB8fCBleGNsdWRlVGFnLmxlbmd0aCA9PT0gMCkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGUgJHtmaWxlfSBnZXQncyBhZGRlZC5gKVxyXG5cdFx0XHRmaWxlQXJyYXkucHVzaChmaWxlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaWxlQXJyYXk7XHJcbn07XHJcbiIsICJpbXBvcnQge1RGaWxlfSBmcm9tICdvYnNpZGlhbic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0Q3JlYXRlZEZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RDcmVhdGVkRmlsZTtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RNb2RpZmllZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RNb2RpZmllZEZpbGUuc3RhdC5tdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdE1vZGlmaWVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdE1vZGlmaWVkRmlsZTtcclxufSAgXHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdERhdGVGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdENyZWF0ZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5jdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vbnRoc0JldHdlZW4oc3RhcnRNb250aDogRGF0ZSwgZW5kTW9udGg6IERhdGUpOiBudW1iZXIge1xyXG5cdGxldCBtb250aHMgPSAoZW5kTW9udGguZ2V0TW9udGgoKSAtIHN0YXJ0TW9udGguZ2V0TW9udGgoKSkgKyAxO1xyXG5cdGlmIChlbmRNb250aC5nZXRGdWxsWWVhcigpID4gc3RhcnRNb250aC5nZXRGdWxsWWVhcigpKSB7XHJcblx0XHRtb250aHMgKz0gKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgLSBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpKjEyO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9udGhzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQuY3RpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQubXRpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhcnRGb3JtYXQoeV9heGlzOiBzdHJpbmcsIGNvdW50c1N0cmluZ01vZDogc3RyaW5nLCBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCBtb25hdHNiZWdyZW56dW5nID0gbnVsbFxyXG5cdGlmIChjaGFydFJlZHV6aWVydW5nTW9uYXRlID09IDApe1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IDBcclxuXHR9IGVsc2Uge1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IGNvdW50c1N0cmluZ01vZC5zcGxpdCgnLCcpLmxlbmd0aCAtIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHR9XHJcblx0XHJcblx0Ly9jb25zdCBtb25hdHNiZWdyZW56dW5nID0gbGVuZ3RoY291bnRzU3RyaW5nQ3JlYXRlIC0gdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlXHJcblx0cmV0dXJuIFwiYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtcIiArIHlfYXhpcyArIFwiXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IG1vZGlmaWVkXFxuICAgIGRhdGE6IFtcIiArIGNvdW50c1N0cmluZ01vZCArIFwiXVxcbnRlbnNpb246IDAuMlxcbndpZHRoOiA4MCAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG55VGl0bGU6IFxcXCJOdW1iZXIgb2YgTm90ZXNcXFwiXFxueFRpdGxlOiBcXFwiTW9udGhzXFxcIlxcbnhNaW46IFwiICsgbW9uYXRzYmVncmVuenVuZyArIFwiXFxuYGBgXCI7XHJcbn1cclxuXHJcbiAgXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQ2hhcnRDb250ZW50IChhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBuZXdDb250ZW50OiBzdHJpbmcpIHtcclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRpZiAobGluZSA9PT0gXCJeQ2hhcnRNb250aFwiKSB7XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmIChyZWZlcmVuY2UgIT0gbnVsbCl7XHJcblx0XHRlbmQgPSByZWZlcmVuY2U7XHJcblx0XHRzdGFydCA9IHJlZmVyZW5jZSAtIDE5O1xyXG5cdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdDb250ZW50LCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIGxldmVsOiBzdHJpbmc7XHJcbiAgfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSWZSZWNlaXZlQUJhZGdlKGxldmVsT2xkOiBudW1iZXIsIGxldmVsTmV3OiBudW1iZXIpOiBib29sZWFuIHtcclxuICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgbGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcbiAgZm9yIChsZXQgaT0wOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspe1xyXG4gICAgaWYgKGxldmVsT2xkIDwgYmFkZ2VMZXZlbHNbaV0gJiYgbGV2ZWxOZXcgPj0gYmFkZ2VMZXZlbHNbaV0pe1xyXG4gICAgICByZWNlaXZlQmFkZ2UgPSB0cnVlXHJcbiAgICB9IFxyXG4gIH1cclxuICByZXR1cm4gcmVjZWl2ZUJhZGdlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIsIGluZm9ybTogYm9vbGVhbik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiLCBsZXZlbDogXCJsZXZlbCA1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgLCBsZXZlbDogXCJsZXZlbCAyMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZSBPd2wgR3VydVwiLCBkZXNjcmlwdGlvbjogXCJXaG9vLWhvbyEgWW91J3ZlIGFjaGlldmVkICdXaXNlIE93bCBHdXJ1JyBzdGF0dXMuIFlvdXIgd2lzZG9tIGlzIGxlZ2VuZGFyeSwgYW5kIHlvdXIgaG9vdHMgb2Yga25vd2xlZGdlIGVjaG8gdGhyb3VnaCB0aGUgZm9yZXN0IG9mIGlnbm9yYW5jZSFcIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVpbnN0ZWluIEluY2FybmF0ZVwiLCBkZXNjcmlwdGlvbjogXCJFdXJla2EhIFlvdSd2ZSBiZWNvbWUgYW4gJ0VpbnN0ZWluIEluY2FybmF0ZSwnIHB1c2hpbmcgdGhlIGJvdW5kYXJpZXMgb2YgdW5kZXJzdGFuZGluZyBhbmQgYmVuZGluZyB0aGUgZmFicmljIG9mIGtub3dsZWRnZSB0byB5b3VyIHdpbGwhXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJNYXN0ZXJtaW5kIFNhZ2VcIiwgZGVzY3JpcHRpb246IFwiTWFnbmlmaWNlbnQhIFlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgcmFuayBvZiAnTWFzdGVybWluZCBTYWdlLCcgZ3VpZGluZyB0aGUgcml2ZXJzIG9mIGluZm9ybWF0aW9uIGFuZCBlbmxpZ2h0ZW5pbmcgYWxsIHdobyBzZWVrIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNlcmVicmFsIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQnJhdmlzc2ltbyEgWW91J3JlIG5vdyBhICdDZXJlYnJhbCBNYWVzdHJvLCcgY29uZHVjdGluZyB0aGUgc3ltcGhvbnkgb2Yga25vd2xlZGdlIHdpdGggdGhlIGZpbmVzc2Ugb2YgYSB2aXJ0dW9zbyBjb25kdWN0b3IhXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJaZW4gS25vd2xlZGdlIEtlZXBlclwiLCBkZXNjcmlwdGlvbjogXCJTZXJlbml0eSBhY2hpZXZlZCEgQXMgYSAnWmVuIEtub3dsZWRnZSBLZWVwZXIsJyB5b3UgbWFpbnRhaW4gYSB0cmFucXVpbCBtaW5kIHdoaWxlIG1hbmFnaW5nIHZhc3QgcG9vbHMgb2Yga25vd2xlZGdlIHdpdGggZ3JhY2UgYW5kIHBvaXNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkXCIsIGRlc2NyaXB0aW9uOiBcIkFsbCBoYWlsIHRoZSAnR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkIScgWW91IHdpZWxkIHRoZSBrbm93bGVkZ2Ugb2YgYWdlcyBhbmQgaG9sZCB0aGUga2V5cyB0byB1bmxvY2sgdGhlIGdhdGVzIG9mIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nXCIsIGRlc2NyaXB0aW9uOiBcIkNvbmdyYXR1bGF0aW9ucywgb2ggd2lzZSBvbmUhIFlvdSd2ZSBhdHRhaW5lZCB0aGUgaGlnaGVzdCBsZXZlbCBvZiBlbmxpZ2h0ZW5tZW50IGFzIHRoZSAnT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcuJyBZb3VyIHVuZGVyc3RhbmRpbmcga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciB3aXNkb20gaXMgYXMgdmFzdCBhcyB0aGUgY29zbW9zIGl0c2VsZiFcIiwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc1tpbmRleF1cclxuICB9XHJcbiAgXHJcblxyXG5cclxuICBleHBvcnQgIGZ1bmN0aW9uIGdldEJhZGdlRm9ySW5pdExldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbMCwgMywgNywgMTUsIDIzLCAzMCwgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzSW5pdDogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgU2Vla2VyIEluaXRpYXRlXCIsIGRlc2NyaXB0aW9uOiBcIldlbGNvbWUgdG8gdGhlIGpvdXJuZXkgb2Yga25vd2xlZGdlISBBcyBhICdMb3JlIFNlZWtlciBJbml0aWF0ZSwnIHlvdSd2ZSB0YWtlbiB5b3VyIGZpcnN0IHN0ZXBzIGludG8gdGhlIHdvcmxkIG9mIG9yZ2FuaXplZCB3aXNkb20uIFlvdXIgcXVlc3QgaGFzIGp1c3QgYmVndW4sIGFuZCB3aXRoIGVhY2ggbm90ZSB5b3UgbWFrZSwgeW91IGxheSB0aGUgZm91bmRhdGlvbiBmb3IgYSBmdXR1cmUgcmljaCB3aXRoIGluc2lnaHRzIGFuZCB1bmRlcnN0YW5kaW5nLiBZb3VyIGpvdXJuZXkgc3RhcnRzIGhlcmUsIGFuZCB0aGUgcGF0aCBhaGVhZCBpcyBmaWxsZWQgd2l0aCBwb3RlbnRpYWwgYW5kIGRpc2NvdmVyeS5cIiwgbGV2ZWw6IFwibGV2ZWwgMVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEFwcHJlbnRpY2VcIiwgZGVzY3JpcHRpb246IFwiWW91J3ZlIGhpdCB0aGUgZ3JvdW5kIHJ1bm5pbmcgd2l0aCB5b3VyIGV4aXN0aW5nIGtub3dsZWRnZSB0cmVhc3VyZXMhIFlvdSdyZSBhbHJlYWR5IGFuICdMb3JlIEFwcHJlbnRpY2UsJyBhcm1lZCB3aXRoIGEgd2VhbHRoIG9mIHdpc2RvbSBhbmQgcmVhZHkgdG8gc2hhcGUgaXQgZnVydGhlci5cIiwgbGV2ZWw6IFwibGV2ZWwgM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYXZ2eSBTY2hvbGFyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBnaXZlbiB5b3UgYSBoZWFkIHN0YXJ0ISBZb3UncmUgbm93IGEgJ1NhdnZ5IFNjaG9sYXIsJyBjb25maWRlbnRseSBkaXZpbmcgaW50byB0aGUgc2VhIG9mIGluZm9ybWF0aW9uIHdpdGggYSB0cmVhc3VyZSB0cm92ZSBvZiBpbnNpZ2h0cy5cIiAsIGxldmVsOiBcImxldmVsIDdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2FnZSdzIEZvdW5kYXRpb25cIiwgZGVzY3JpcHRpb246IFwiQnVpbGRpbmcgdXBvbiB5b3VyIHByZS1leGlzdGluZyBub3RlcywgeW91J3JlIGVzdGFibGlzaGluZyB0aGUgJ1NhZ2UncyBGb3VuZGF0aW9uJyBmb3IgYW4gZXZlbiBncmFuZGVyIGVkaWZpY2Ugb2Yga25vd2xlZGdlLiBZb3VyIGdyb3VuZHdvcmsgaXMgaW1wcmVzc2l2ZSFcIiAsIGxldmVsOiBcImxldmVsIDE1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2RvbSBTZWVkbGluZ1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbnVydHVyZWQgdGhlIGdyb3d0aCBvZiBhICdXaXNkb20gU2VlZGxpbmcuJyBZb3UncmUgY3VsdGl2YXRpbmcgeW91ciBnYXJkZW4gb2Yga25vd2xlZGdlIHdpdGggY2FyZSBhbmQgcGF0aWVuY2UuXCIgLCBsZXZlbDogXCJsZXZlbCAyM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJQcm9kaWdpb3VzIFByZXBhcmVyXCIsIGRlc2NyaXB0aW9uOiBcIlRoYW5rcyB0byB5b3VyIHByaW9yIGVmZm9ydHMsIHlvdSdyZSBhICdQcm9kaWdpb3VzIFByZXBhcmVyLCcgc3RhbmRpbmcgdGFsbCBhbW9uZyB5b3VyIG5vdGVzIGFuZCByZWFkeSB0byBjb25xdWVyIG5ldyByZWFsbXMgb2YgdW5kZXJzdGFuZGluZy5cIiAsIGxldmVsOiBcImxldmVsIDMwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVwaWMgRXBpcGhhbnkgRXhwbG9yZXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBwYXN0IG5vdGVzIGhhdmUgbGVkIHlvdSB0byB0aGUgZ3JhbmQgJ0VwaWMgRXBpcGhhbnkgRXhwbG9yZXInIHN0YXR1cyEgWW91J3ZlIGFscmVhZHkgYmVlbiBkb3duIGEgZmV3IHJhYmJpdCBob2xlcyBhbmQgY29tZSBvdXQgd2l0aCBkYXp6bGluZyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgTHVtaW5hcnlcIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIGlsbHVtaW5hdGluZyB5b3VyIHBhdGgsIHlvdSd2ZSBiZWNvbWUgYSAnTG9yZSBMdW1pbmFyeSwnIHNoaW5pbmcgbGlnaHQgb24gdGhlIG15c3RlcmllcyBvZiB0aGUgdW5pdmVyc2UsIG9uZSBpZGVhIGF0IGEgdGltZS5cIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjcmliZSBvZiB0aGUgQW5jaWVudHNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBtYXN0ZXJ5IG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYW5hZ2VtZW50IGhhcyBlbGV2YXRlZCB5b3UgdG8gdGhlIGVzdGVlbWVkIHJhbmsgb2YgdGhlICdTY3JpYmUgb2YgdGhlIEFuY2llbnRzLicgWW91ciBleGlzdGluZyBub3RlcyBoYXZlIHRyYW5zZm9ybWVkIGludG8gdHJlYXN1cmVzLCBicmlkZ2luZyB0aGUgZ2FwIGJldHdlZW4gb2xkIHdpc2RvbSBhbmQgbmV3IGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXVyZWthIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQXJtZWQgd2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzLCB5b3UncmUgdGhlICdFdXJla2EgTWFlc3RybywnIGNvbXBvc2luZyBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHdpdGggdGhlIG1lbG9keSBvZiBkaXNjb3ZlcnkuXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDaHJvbmljbGVzIENoYW1waW9uXCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBzdGFuZGluZyBhcyBhIHRlc3RhbWVudCwgeW91J3ZlIGFzY2VuZGVkIHRvIHRoZSBpbGx1c3RyaW91cyAnQ2hyb25pY2xlcyBDaGFtcGlvbicgbGV2ZWwuIFlvdXIgam91cm5leSB0aHJvdWdoIHRpbWUncyB0YXBlc3RyeSBoYXMgYnJvdWdodCBmb3J0aCBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHBhc3QgYW5kIHByZXNlbnQuXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXJcIiwgZGVzY3JpcHRpb246IFwiQXMgJ1RoZSBDdXJpb3VzIENhcnRvZ3JhcGhlciwnIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYXBwZWQgb3V0IHVuY2hhcnRlZCB0ZXJyaXRvcmllcyBvZiB1bmRlcnN0YW5kaW5nLiBZb3VyIGN1cmlvc2l0eSBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIG5vdGVzIGFyZSB0aGUgY29tcGFzcyBndWlkaW5nIHlvdXIgZXhwbG9yYXRpb24uXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTdWx0YW4gb2YgU3ludGhlc2lzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYWRlIHlvdSB0aGUgJ1N1bHRhbiBvZiBTeW50aGVzaXMuJyBZb3UncmUgdGhlIG1hc3RlciB3ZWF2ZXIsIHRocmVhZGluZyB0b2dldGhlciB0aHJlYWRzIG9mIGluZm9ybWF0aW9uIGludG8gYSByaWNoIHRhcGVzdHJ5IG9mIGluc2lnaHQuXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdGVybmFsIEFyY2hpdmlzdFwiLCBkZXNjcmlwdGlvbjogXCJBdCB0aGUgcGlubmFjbGUgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hc3RlcnksIHlvdSdyZSBub3cgcmV2ZXJlZCBhcyB0aGUgJ0V0ZXJuYWwgQXJjaGl2aXN0LicgWW91ciBleGlzdGluZyBub3RlcywgY2FyZWZ1bGx5IGN1cmF0ZWQgYW5kIG51cnR1cmVkLCBzdGFuZCBhcyBpbW1vcnRhbCBiZWFjb25zLCBndWlkaW5nIHNlZWtlcnMgdGhyb3VnaCB0aGUgbGFieXJpbnRoIG9mIGtub3dsZWRnZSBhY3Jvc3MgYWdlcy5cIiAsIGxldmVsOiBcImxldmVsIDEwMFwiIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc0luaXRbaW5kZXhdXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRXhhbXBsZSB1c2FnZTpcclxuICAvLyBjb25zdCBjdXJyZW50TGV2ZWwgPSA0MjsgLy8gUmVwbGFjZSB0aGlzIHdpdGggdGhlIGFjdHVhbCBwbGF5ZXIncyBsZXZlbFxyXG4gIC8vIGNvbnN0IGJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChjdXJyZW50TGV2ZWwpO1xyXG4gIC8vIGNvbnNvbGUubG9nKGBDb25ncmF0dWxhdGlvbnMhIFlvdSd2ZSByZWFjaGVkIExldmVsICR7Y3VycmVudExldmVsfS4gWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YCk7XHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4gICAgLypcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiIH0sXHJcbiAgICAgIC8vIEFkZCBtb3JlIGJhZGdlcyBoZXJlIGZvciBsZXZlbHMgNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIGFuZCAxMDBcclxuICAgICAgLy8gRXhhbXBsZTpcclxuICAgICAgLy8geyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgfSxcclxuICAgICAgLy8geyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiB9LFxyXG4gICAgICAvLyAuLi5hbmQgc28gb25cclxuICAgIF07XHJcbiAgXHJcbiAgICBjb25zdCBtYXhMZXZlbCA9MTAwOyAvLyBBc3N1bWluZyBlYWNoIGJhZGdlIGlzIGF3YXJkZWQgZXZlcnkgNSBsZXZlbHNcclxuICAgIGNvbnN0IGNhcHBlZExldmVsID0gTWF0aC5taW4obGV2ZWwsIG1heExldmVsKTtcclxuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihjYXBwZWRMZXZlbCAvIDUpIC0gMTtcclxuICAgIHJldHVybiBiYWRnZXNbaW5kZXhdO1xyXG4gIH1cclxuICBcclxuXHJcbiAgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgfVxyXG4gICovXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIExldmVsRGF0YSB7XHJcbiAgICBwb2ludHM6IG51bWJlcjtcclxuICAgIGxldmVsOiBudW1iZXI7XHJcbiAgICBwb2ludHNOZXh0OiBudW1iZXI7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbnN0IGxldmVsRGF0YTogTGV2ZWxEYXRhW10gPSBbXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDAsIHBvaW50c05leHQ6IDB9LFxyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAxLCBwb2ludHNOZXh0OiAxMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMCwgbGV2ZWw6IDIsIHBvaW50c05leHQ6IDMwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwLCBsZXZlbDogMywgcG9pbnRzTmV4dDogNzUwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAsIGxldmVsOiA0LCBwb2ludHNOZXh0OiAxNTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MDAwLCBsZXZlbDogNSwgcG9pbnRzTmV4dDogMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMCwgbGV2ZWw6IDYsIHBvaW50c05leHQ6IDUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTAwMDAsIGxldmVsOiA3LCBwb2ludHNOZXh0OiA4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgwMDAwLCBsZXZlbDogOCwgcG9pbnRzTmV4dDogMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIwMDAwLCBsZXZlbDogOSwgcG9pbnRzTmV4dDogMTcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTcwMDAwLCBsZXZlbDogMTAsIHBvaW50c05leHQ6IDIzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMDAwMCwgbGV2ZWw6IDExLCBwb2ludHNOZXh0OiAzMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAsIGxldmVsOiAxMiwgcG9pbnRzTmV4dDogMzgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzgwMDAwLCBsZXZlbDogMTMsIHBvaW50c05leHQ6IDQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3MDAwMCwgbGV2ZWw6IDE0LCBwb2ludHNOZXh0OiA2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDAwMDAsIGxldmVsOiAxNSwgcG9pbnRzTmV4dDogNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMDAwLCBsZXZlbDogMTYsIHBvaW50c05leHQ6IDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMDAwMCwgbGV2ZWw6IDE3LCBwb2ludHNOZXh0OiAxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTExMDAwMCwgbGV2ZWw6IDE4LCBwb2ludHNOZXh0OiAxMzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMyMDAwMCwgbGV2ZWw6IDE5LCBwb2ludHNOZXh0OiAxNTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTU1MDAwMCwgbGV2ZWw6IDIwLCBwb2ludHNOZXh0OiAxODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTgwMDAwMCwgbGV2ZWw6IDIxLCBwb2ludHNOZXh0OiAyMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjA3MDAwMCwgbGV2ZWw6IDIyLCBwb2ludHNOZXh0OiAyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjM2MDAwMCwgbGV2ZWw6IDIzLCBwb2ludHNOZXh0OiAyNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjY3MDAwMCwgbGV2ZWw6IDI0LCBwb2ludHNOZXh0OiAzMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwMCwgbGV2ZWw6IDI1LCBwb2ludHNOZXh0OiAzMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM1MDAwMCwgbGV2ZWw6IDI2LCBwb2ludHNOZXh0OiAzNzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzcyMDAwMCwgbGV2ZWw6IDI3LCBwb2ludHNOZXh0OiA0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDExMDAwMCwgbGV2ZWw6IDI4LCBwb2ludHNOZXh0OiA0NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUyMDAwMCwgbGV2ZWw6IDI5LCBwb2ludHNOZXh0OiA0OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDk1MDAwMCwgbGV2ZWw6IDMwLCBwb2ludHNOZXh0OiA1NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQwMDAwMCwgbGV2ZWw6IDMxLCBwb2ludHNOZXh0OiA1ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTg3MDAwMCwgbGV2ZWw6IDMyLCBwb2ludHNOZXh0OiA2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjM2MDAwMCwgbGV2ZWw6IDMzLCBwb2ludHNOZXh0OiA2ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjg3MDAwMCwgbGV2ZWw6IDM0LCBwb2ludHNOZXh0OiA3NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwMDAwMCwgbGV2ZWw6IDM1LCBwb2ludHNOZXh0OiA3OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzk1MDAwMCwgbGV2ZWw6IDM2LCBwb2ludHNOZXh0OiA4NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODUyMDAwMCwgbGV2ZWw6IDM3LCBwb2ludHNOZXh0OiA5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTExMDAwMCwgbGV2ZWw6IDM4LCBwb2ludHNOZXh0OiA5NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTcyMDAwMCwgbGV2ZWw6IDM5LCBwb2ludHNOZXh0OiAxMDM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMzUwMDAwLCBsZXZlbDogNDAsIHBvaW50c05leHQ6IDExMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTEwMDAwMDAsIGxldmVsOiA0MSwgcG9pbnRzTmV4dDogMTE2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTY3MDAwMCwgbGV2ZWw6IDQyLCBwb2ludHNOZXh0OiAxMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMzYwMDAwLCBsZXZlbDogNDMsIHBvaW50c05leHQ6IDEzMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMwNzAwMDAsIGxldmVsOiA0NCwgcG9pbnRzTmV4dDogMTM4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzgwMDAwMCwgbGV2ZWw6IDQ1LCBwb2ludHNOZXh0OiAxNDU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE0NTUwMDAwLCBsZXZlbDogNDYsIHBvaW50c05leHQ6IDE1MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUzMjAwMDAsIGxldmVsOiA0NywgcG9pbnRzTmV4dDogMTYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjExMDAwMCwgbGV2ZWw6IDQ4LCBwb2ludHNOZXh0OiAxNjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2OTIwMDAwLCBsZXZlbDogNDksIHBvaW50c05leHQ6IDE3NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTc3NTAwMDAsIGxldmVsOiA1MCwgcG9pbnRzTmV4dDogMTg2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODYwMDAwMCwgbGV2ZWw6IDUxLCBwb2ludHNOZXh0OiAxOTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE5NDcwMDAwLCBsZXZlbDogNTIsIHBvaW50c05leHQ6IDIwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjAzNjAwMDAsIGxldmVsOiA1MywgcG9pbnRzTmV4dDogMjEyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMTI3MDAwMCwgbGV2ZWw6IDU0LCBwb2ludHNOZXh0OiAyMjIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIyMjAwMDAwLCBsZXZlbDogNTUsIHBvaW50c05leHQ6IDIzMTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMxNTAwMDAsIGxldmVsOiA1NiwgcG9pbnRzTmV4dDogMjQxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNDEyMDAwMCwgbGV2ZWw6IDU3LCBwb2ludHNOZXh0OiAyNTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI1MTEwMDAwLCBsZXZlbDogNTgsIHBvaW50c05leHQ6IDI2MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjYxMjAwMDAsIGxldmVsOiA1OSwgcG9pbnRzTmV4dDogMjcxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNzE1MDAwMCwgbGV2ZWw6IDYwLCBwb2ludHNOZXh0OiAyODIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI4MjAwMDAwLCBsZXZlbDogNjEsIHBvaW50c05leHQ6IDI5MjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjkyNzAwMDAsIGxldmVsOiA2MiwgcG9pbnRzTmV4dDogMzAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDM2MDAwMCwgbGV2ZWw6IDYzLCBwb2ludHNOZXh0OiAzMTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMxNDcwMDAwLCBsZXZlbDogNjQsIHBvaW50c05leHQ6IDMyNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzI2MDAwMDAsIGxldmVsOiA2NSwgcG9pbnRzTmV4dDogMzM3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzc1MDAwMCwgbGV2ZWw6IDY2LCBwb2ludHNOZXh0OiAzNDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM0OTIwMDAwLCBsZXZlbDogNjcsIHBvaW50c05leHQ6IDM2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzYxMTAwMDAsIGxldmVsOiA2OCwgcG9pbnRzTmV4dDogMzczMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzMyMDAwMCwgbGV2ZWw6IDY5LCBwb2ludHNOZXh0OiAzODU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4NTUwMDAwLCBsZXZlbDogNzAsIHBvaW50c05leHQ6IDM5ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzk4MDAwMDAsIGxldmVsOiA3MSwgcG9pbnRzTmV4dDogNDEwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTA3MDAwMCwgbGV2ZWw6IDcyLCBwb2ludHNOZXh0OiA0MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQyMzYwMDAwLCBsZXZlbDogNzMsIHBvaW50c05leHQ6IDQzNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDM2NzAwMDAsIGxldmVsOiA3NCwgcG9pbnRzTmV4dDogNDUwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTAwMDAwMCwgbGV2ZWw6IDc1LCBwb2ludHNOZXh0OiA0NjM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ2MzUwMDAwLCBsZXZlbDogNzYsIHBvaW50c05leHQ6IDQ3NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDc3MjAwMDAsIGxldmVsOiA3NywgcG9pbnRzTmV4dDogNDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTExMDAwMCwgbGV2ZWw6IDc4LCBwb2ludHNOZXh0OiA1MDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwNTIwMDAwLCBsZXZlbDogNzksIHBvaW50c05leHQ6IDUxOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTE5NTAwMDAsIGxldmVsOiA4MCwgcG9pbnRzTmV4dDogNTM0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MzQwMDAwMCwgbGV2ZWw6IDgxLCBwb2ludHNOZXh0OiA1NDg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0ODcwMDAwLCBsZXZlbDogODIsIHBvaW50c05leHQ6IDU2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTYzNjAwMDAsIGxldmVsOiA4MywgcG9pbnRzTmV4dDogNTc4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1Nzg3MDAwMCwgbGV2ZWw6IDg0LCBwb2ludHNOZXh0OiA1OTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU5NDAwMDAwLCBsZXZlbDogODUsIHBvaW50c05leHQ6IDYwOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjA5NTAwMDAsIGxldmVsOiA4NiwgcG9pbnRzTmV4dDogNjI1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MjUyMDAwMCwgbGV2ZWw6IDg3LCBwb2ludHNOZXh0OiA2NDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY0MTEwMDAwLCBsZXZlbDogODgsIHBvaW50c05leHQ6IDY1NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjU3MjAwMDAsIGxldmVsOiA4OSwgcG9pbnRzTmV4dDogNjczNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NzM1MDAwMCwgbGV2ZWw6IDkwLCBwb2ludHNOZXh0OiA2OTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY5MDAwMDAwLCBsZXZlbDogOTEsIHBvaW50c05leHQ6IDcwNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzA2NzAwMDAsIGxldmVsOiA5MiwgcG9pbnRzTmV4dDogNzIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MjM2MDAwMCwgbGV2ZWw6IDkzLCBwb2ludHNOZXh0OiA3NDA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDcwMDAwLCBsZXZlbDogOTQsIHBvaW50c05leHQ6IDc1ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzU4MDAwMDAsIGxldmVsOiA5NSwgcG9pbnRzTmV4dDogNzc1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NzU1MDAwMCwgbGV2ZWw6IDk2LCBwb2ludHNOZXh0OiA3OTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5MzIwMDAwLCBsZXZlbDogOTcsIHBvaW50c05leHQ6IDgxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODExMTAwMDAsIGxldmVsOiA5OCwgcG9pbnRzTmV4dDogODI5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MjkyMDAwMCwgbGV2ZWw6IDk5LCBwb2ludHNOZXh0OiA4NDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg0NzUwMDAwLCBsZXZlbDogMTAwLCBwb2ludHNOZXh0OiA4NjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg2NjAwMDAwLCBsZXZlbDogMTAxLCBwb2ludHNOZXh0OiA4ODQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg4NDcwMDAwLCBsZXZlbDogMTAyLCBwb2ludHNOZXh0OiA5MDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkwMzYwMDAwLCBsZXZlbDogMTAzLCBwb2ludHNOZXh0OiA5MjI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMjcwMDAwLCBsZXZlbDogMTA0LCBwb2ludHNOZXh0OiA5NDIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk0MjAwMDAwLCBsZXZlbDogMTA1LCBwb2ludHNOZXh0OiA5NjE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk2MTUwMDAwLCBsZXZlbDogMTA2LCBwb2ludHNOZXh0OiA5ODEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk4MTIwMDAwLCBsZXZlbDogMTA3LCBwb2ludHNOZXh0OiAxMDAxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAxMTAwMDAsIGxldmVsOiAxMDgsIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMjEyMDAwMCwgbGV2ZWw6IDEwOSwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTA0MTUwMDAwLCBsZXZlbDogMTEwLCBwb2ludHNOZXh0OiAxMDYxNTAwMDAgfSxcclxuICBdO1xyXG4gIFxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRMZXZlbEZvclBvaW50cyhwb2ludHM6IG51bWJlcik6IExldmVsRGF0YSB7XHJcbiAgICBsZXQgbGV2ZWwgOkxldmVsRGF0YSA9IGxldmVsRGF0YVswXTtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHBvaW50cyA+PSBkYXRhLnBvaW50cykge1xyXG4gICAgICAgIGxldmVsID0gZGF0YTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxldmVsO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c1BvaW50c0ZvckxldmVsKHRhcmdldExldmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHN0YXR1c1BvaW50cyA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmICh0YXJnZXRMZXZlbCA9PSBkYXRhLmxldmVsICYmIHN0YXR1c1BvaW50cyA9PSAwKSB7XHJcbiAgICAgICAgc3RhdHVzUG9pbnRzID0gZGF0YS5wb2ludHM7XHJcbiAgICAgIH0gXHJcbiAgICB9XHJcblxyXG5cdFx0XHJcblx0XHRyZXR1cm4gc3RhdHVzUG9pbnRzXHJcbiAgfVxyXG4gIFxyXG5cclxuLypcclxuY29uc3QgcG9pbnRzID0gNTUwMDtcclxuY29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhwb2ludHMpO1xyXG5jb25zb2xlLmxvZyhgV2l0aCAke3BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsfS5gKTtcclxuKi8iLCAiY29uc3QgbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2U6IHN0cmluZ1tdID0gW1xyXG5cdFwiU2V2ZW4gZGF5cyBvZiBub3RlLXRha2luZz8gWW91J3JlIHByYWN0aWNhbGx5IGEgbm90ZSBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBmaWVzdGEhIFx1RDgzQ1x1REY4OVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBwYXJ0eSBnb2luZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0gWW91J3JlIGxpa2UgdGhlIEphbWVzIEJvbmQgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REQ3Nlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzZWNyZXQgYWdlbnQhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhICdOb3RlLUEtRGF5JyBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXBlcyBvcHRpb25hbCFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3ZlIHByYWN0aWNhbGx5IHdyaXR0ZW4gYSBtaW5pIG5vdmVsIGJ5IG5vdyEgXHVEODNEXHVEQ0RBXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGF1dGhvciBzdGF0dXMgYWNoaWV2ZWQhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFVzYWluIEJvbHQgb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzcHJpbnRpbmcgdG93YXJkcyBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc3ByZWUhIEl0J3MgbGlrZSBhIG5vdGVzLXBsb3Npb24hIFx1RDgzRFx1RENBNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBmaXJld29ya3MgY29taW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYmFzaWNhbGx5IHRoZSBNaWNoYWVsIEpvcmRhbiBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNsYW0gZHVuayFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNVlAhIFx1RDgzQ1x1REZDNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNjb3JpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgJ1NldmVuIERheSBOb3RlIEZldmVyJyBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhdGNoIHRoZSBmZXZlciFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGphbW1pbichXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgbWFnaWMgc2hvdyEgTm93IHlvdSBzZWUgdGhlIG5vdGVzLCBub3cgeW91IGRvbid0ISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cywga2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBsaWtlIGEgbm90ZS10YWtpbmcgSmVkaSBNYXN0ZXIhIFx1RDgzQ1x1REYwQ1x1MjY5NFx1RkUwRiBbWF0gcG9pbnRzLCBtYXkgdGhlIG5vdGVzIGJlIHdpdGggeW91IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNYWNHeXZlciwgdHVybmluZyBpbmZvcm1hdGlvbiBpbnRvIHNvbHV0aW9ucyEgXHVEODNEXHVERDI3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY3JhZnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBjaGVmLCBjb29raW5nIHVwIGEga25vd2xlZGdlIGZlYXN0ISBcdUQ4M0NcdURGNzNcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjb29raW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQwXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTGV3aXMgYW5kIENsYXJrLCBjaGFydGluZyBuZXcgdGVycml0b3JpZXMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURERkFcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGRldGVjdGl2ZSwgc29sdmluZyBjYXNlcyBvZiBjdXJpb3NpdHkhIFx1RDgzRFx1REQ3NVx1RkUwRlx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGRldGVjdGluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHBpb25lZXIsIGJsYXppbmcgdHJhaWxzIHRocm91Z2ggdGhlIGZvcmVzdHMgb2YgaW5mb3JtYXRpb24hIFx1RDgzQ1x1REYzMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBpb25lZXJpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCJcclxuXTtcclxuXHJcbmNvbnN0IHR3b05vdGVNZXNzYWdlczogc3RyaW5nW10gPSBbXHJcblx0XCJCb29tISBZb3UganVzdCBhY2VkIHRoZSAyLW5vdGUgdGFuZ28hIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgZ3Jvb3ZpbichXCIsXHJcblx0XCJUd28gbm90ZXMgaW4gYSBkYXk/IFlvdSdyZSBvZmZpY2lhbGx5IGEgTm90ZSBOaW5qYSEgXHVEODNFXHVERDRCIFtYXSBwb2ludHMgZWFybmVkLiBSb2NrIG9uIVwiLFxyXG5cdFwiSGlnaC1maXZlISBZb3UndmUgY29ucXVlcmVkIHRoZSAyLW5vdGUgcm9kZW8hIFx1RDgzRVx1REQyMCBbWF0gcG9pbnRzIGVhcm5lZC4gWWVlaGF3IVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUhIFR3byBub3RlcyBpbiBvbmUgZGF5LCB5b3UgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgVHdvIG5vdGVzIGluIGEgZGF5IC0gd2hhdCdzIHlvdXIgc2VjcmV0IHdlYXBvbj8gXHVEODNEXHVERDI1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJLYWJvb20hIFlvdSBqdXN0IGJsZXcgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSB3YXRlciEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhIDItbm90ZSBzdXBlcnN0YXIhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGluIHRoZSBiYWcuIEtlZXAgc2hpbmluZyFcIixcclxuXHRcIkRvdWJsZSB1cCwgZG91YmxlIGRvd24hIFR3byBub3RlcyBpbiBvbmUgZGF5IC0geW91J3JlIGEgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgcGFydHkhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiS2EtY2hpbmchIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIHJhY2tpbmcgdXAgdGhvc2UgcG9pbnRzISBcdUQ4M0RcdURDQjAgW1hdIGVhcm5lZCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWdpY2lhbiEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHRyaWNrP1wiLFxyXG5cdFwiVHdvIG5vdGVzPyBOYWlsZWQgaXQhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCBnb2luZyFcIixcclxuXHRcIkFicmEtY2FkYWJyYSEgVHdvIG5vdGVzIGFwcGVhciEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlLCBkb3VibGUgdGhlIGZ1biEgVHdvIG5vdGVzIGluIG9uZSBkYXkhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgZmllc3RhISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYXBvdyEgVHdvIG5vdGVzIGluIGEgZGF5IC0geW91J3JlIGEgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEYgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBhZHZlbnR1cmU/XCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCJcclxuXTtcclxuXHJcbmNvbnN0IHJhbmRvbVBvaW50Tm90aWNlczogc3RyaW5nW10gPSBbXHJcblx0XCJCYXppbmdhISBZb3UganVzdCBzbmFnZ2VkIFtYXSBwb2ludHMhXCIsXHJcblx0XCJLYWJvb20hIFtYXSBwb2ludHMgYXJlIG5vdyBpbiB5b3VyIHBvY2tldCFcIixcclxuXHRcIldvb2hvbyEgW1hdIHBvaW50cyBlYXJuZWQhIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJQb2ludHMgYWhveSEgW1hdIG1vcmUgaW4gdGhlIGJhbmshXCIsXHJcblx0XCJTY29yZSEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHRvdGFsIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlppcHBpdHktemFwISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJDaGFtcGlvbiBtb3ZlISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIkJpbmdvISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIlNoYXphbSEgW1hdIHBvaW50cyB0byB0aGUgcmVzY3VlIVwiLFxyXG5cdFwiS2EtY2hpbmchIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkJyYXZvISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJXZWxsIGRvbmUhIFtYXSBtb3JlIHBvaW50cyBpbiB0b3chXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMsIGp1c3QgbGlrZSB0aGF0IVwiLFxyXG5cdFwiQSByb3VuZCBvZiBhcHBsYXVzZSBmb3IgW1hdIHBvaW50cyFcIixcclxuXHRcIldob29zaCEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJXb28hIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJHcmVhdCBqb2IhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiRmFudGFzdGljISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJIb29yYXkhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiTmljZSBvbmUhIFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldCFcIixcclxuXHRcIldvb3Qgd29vdCEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQmFtISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJDb29sIGJlYW5zISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIlNwbGVuZGlkISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJNYXJ2ZWxvdXMhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFueSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiRXhxdWlzaXRlISBbWF0gcG9pbnRzIGluIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJPdXRzdGFuZGluZyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugam9iIVwiLFxyXG5cdFwiTWFnbmlmaWNlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJUZXJyaWZpYyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiRXhjZWxsZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJBd2Vzb21lISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJXZWxsIHBsYXllZCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIkltcHJlc3NpdmUhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCcmlsbGlhbnQhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk5pY2UgbW92ZSEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiU3RlbGxhciEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJXZWxsIGRlc2VydmVkISBbWF0gcG9pbnRzIGVhcm5lZCFcIlxyXG5dO1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlVHdvTm90ZUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0d29Ob3RlTWVzc2FnZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gdHdvTm90ZU1lc3NhZ2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlUG9pbnRzKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHJhbmRvbVBvaW50Tm90aWNlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSByYW5kb21Qb2ludE5vdGljZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG4vLyBFeGFtcGxlIHVzYWdlXHJcbi8vIGNvbnN0IHJhbmRvbVBvaW50cyA9IDEwMDsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIHBvaW50cyB2YWx1ZVxyXG4vLyBjb25zdCByYW5kb21NZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShyYW5kb21Qb2ludHMpO1xyXG4vLyBjb25zb2xlLmxvZyhyYW5kb21NZXNzYWdlKTtcclxuXHJcblxyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFBLG1CQUFxRTs7O0FDQXJFLHNCQUErQztBQUd4QyxJQUFNLGtCQUFzQztBQUFBLEVBQ2pELG1CQUFtQjtBQUFBLEVBQ25CLFdBQVc7QUFBQSxFQUNYLFNBQVM7QUFBQSxFQUNULGdCQUFnQjtBQUFBLEVBQ2hCLGFBQWE7QUFBQSxFQUNiLGVBQWU7QUFBQSxFQUNmLHNCQUFzQjtBQUFBLEVBQ3RCLHNCQUFzQjtBQUFBLEVBQ3RCLGFBQWE7QUFBQSxFQUNiLGtCQUFrQjtBQUFBLEVBQ2xCLHdCQUF3QjtBQUFBLEVBQ3hCLGNBQWM7QUFBQSxFQUNkLGFBQWE7QUFBQSxFQUNiLGdCQUFnQjtBQUFB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O0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3RELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUN6RDtBQUVPLFNBQVMsa0JBQWtCLFFBQTJCO0FBQzNELE1BQUksUUFBbUIsVUFBVSxDQUFDO0FBQ2xDLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksVUFBVSxLQUFLLFFBQVE7QUFDekIsY0FBUTtBQUFBLElBQ1YsT0FBTztBQUNMO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLHFCQUFxQixhQUE2QjtBQUNoRSxNQUFJLGVBQWU7QUFDbkIsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxlQUFlLEtBQUssU0FBUyxnQkFBZ0IsR0FBRztBQUNsRCxxQkFBZSxLQUFLO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBR0YsU0FBTztBQUNQOzs7QUM5SUYsSUFBTSwwQkFBb0M7QUFBQSxFQUN6QztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0sa0JBQTRCO0FBQUEsRUFDakM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0scUJBQStCO0FBQUEsRUFDcEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FB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QjtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImFwcCIsICJvYmoiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiTUlMTElTRUNPTkRTX0lOX1dFRUsiLCAiZm9ybWF0dGVycyIsICJsb2NhbGl6ZSIsICJ5IiwgIk0iLCAiZCIsICJhIiwgImgiLCAiSCIsICJtIiwgInMiLCAiUyIsICJkYXRlTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXRMb25nIiwgInRpbWVMb25nRm9ybWF0dGVyIiwgImRhdGVUaW1lTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXQiLCAiZm9ybWF0RGlzdGFuY2UiLCAiZm9ybWF0IiwgImZvcm1hdFJlbGF0aXZlIiwgIm9yZGluYWxOdW1iZXIiLCAidmFsdWVDYWxsYmFjayIsICJkZWZhdWx0T3B0aW9ucyIsICJsb2NhbGUiLCAibWF0Y2giLCAicGF0aCIsICJhcHAiLCAiZmlsZU5hbWUiLCAiY3VycmVudENvdW50IiwgImkiLCAiaSIsICJlIiwgImkiLCAibWF0Y2giLCAiZmlsZSIsICJhcHAiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJyk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpXHJcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlICogKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyKSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZWFjaGVkISAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBjcmVhdGVkLmApXHJcblx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHQvLyBkbyBub3RoaW5nXHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBub3RlIGNyZWF0aW9uIHdhcyByYXRlZCBhbHJlYWR5IHRvZGF5LmApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCkge1xyXG5cdFx0bGV0IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRpZiAoY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA8IDcpIHtcclxuXHRcdFx0Y3VycmVudFdlZWtseUNyZWF0ZWROb3RlcysrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXIpIHtcclxuXHRcdGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrIDw9IDYpIHtcclxuXHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDEpO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSAqICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcikpO1xyXG5cdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgdXBkYXRlU3RhdHVzQmFyKHN0YXR1c2JhcjogSFRNTFNwYW5FbGVtZW50KXtcclxuXHRcdGNvbnN0IGN1cnJlbnRMZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKVxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NiYXJQZXJjZW50ID0gKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzIC0gY3VycmVudExldmVsLnBvaW50cykvKGN1cnJlbnRMZXZlbC5wb2ludHNOZXh0IC0gY3VycmVudExldmVsLnBvaW50cykqMTAwO1xyXG5cdFx0Y29uc3QgY2hhck51bVByb2dyZXNzYmFyID0gMTBcclxuXHRcdGNvbnN0IGJhckxlbmd0aCA9IE1hdGgucm91bmQocHJvZ3Jlc3NiYXJQZXJjZW50IC8gY2hhck51bVByb2dyZXNzYmFyKVxyXG5cdFx0c3RhdHVzYmFyLnNldFRleHQoYFx1RDgzQ1x1REZCMnxsdmw6ICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gfCAke3RoaXMuY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyLCBiYXJMZW5ndGgpfWApXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZVByb2dyZXNzYmFyKGNoYXJOdW1Qcm9ncmVzc2JhcjogbnVtYmVyLCBiYXJMZW5ndGg6IG51bWJlcikge1xyXG5cdFx0bGV0IHByb2dyZXNzYmFyID0gJydcclxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDw9IGNoYXJOdW1Qcm9ncmVzc2JhcjsgaSsrKSB7XHJcblx0XHRcdGlmIChpIDw9IGJhckxlbmd0aCkge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICc9J1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICctJ1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJvZ3Jlc3NiYXI7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdFx0Y29uc29sZS5sb2coJ2xvYWRTZXR0aW5ncygpJylcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNUb0FkZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGxldCBib29zdGVyRmFjdG9yID0gMTtcclxuXHRcdGxldCBzdHJlYWtib29zdGVyID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyO1xyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSBwb2ludHNUb0FkZCAqIChib29zdGVyRmFjdG9yICsgc3RyZWFrYm9vc3RlcikgKyB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlU3RyZWFrYm9vc3RlcihpbmNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHRjb25zdCBuZXdWYWx1ZSA9IHBhcnNlRmxvYXQoKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArIGluY3JlYXNlVmFsdWUpLnRvRml4ZWQoMSkpO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3VmFsdWU7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRjb25zb2xlLmxvZyhgc3RyZWFrYm9vc3RlcjogJHt0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJ9YClcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gcGFyc2VGbG9hdCgodGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC0gZGVjcmVhc2VWYWx1ZSkudG9GaXhlZCgxKSlcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKicgKyB0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayArICcvMioqICAgfCc7XHJcblx0XHRjb25zdCBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gOiBudW1iZXIgPSA3IC0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0Y29uc3Qgd2Vla2x5Q2hhbGxlbmdlID0gJ3wgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKicgKyB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgKyAnLzcqKiAgIHxcXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW2RheXMgZG9uZSBpbiBhIHJvd11cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XFxuICAgIGRhdGE6IFsnICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgZGF5c0xlZnRJbldlZWtseUNoYWluICsgJ11cXG54TWluOiAwXFxueE1heDogN1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCc7XHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gJ3wgKipib29zdGVyIGZhY3RvcioqIHwgKionICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyICsgJyoqIHwnXHJcblxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCAmJiByZWZlcmVuY2UzICE9IG51bGwgJiYgcmVmZXJlbmNlNCAhPSBudWxsKXtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAyO1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyNDtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQzID0gcmVmZXJlbmNlMyArIDI0IC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDQgPSByZWZlcmVuY2U0IC0gMSAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgNTUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDQgPSByZWZlcmVuY2U0IC0gMjUgOyAvLyBubyBpZGVhIHdieSBvZmZzZXQgNTUgaXMgbmVlZGVkXHJcblx0XHRcdFxyXG5cclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdQb2ludHNTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgZGFpbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMzID0gWy4uLm5ld0xpbmVzMi5zbGljZSgwLCBzdGFydDMpLCB3ZWVrbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzMi5zbGljZShlbmQzKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzNCA9IFsuLi5uZXdMaW5lczMuc2xpY2UoMCwgc3RhcnQ0KSwgYm9vc3RlckZhY3RvciwgLi4ubmV3TGluZXMzLnNsaWNlKGVuZDQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczQuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVjZWl2ZUJhZGdlXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZ2l2ZUJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBiYWRnZS5sZXZlbCArIFwiOiAqXCIgKyBiYWRnZS5uYW1lICsgXCIqXCIpe1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAxO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiArIDI7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKiBcIiArIGJhZGdlLmxldmVsICsgXCJcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV1cclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczIuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZUluaXRCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCApe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHJlbW92ZUJhZGdlc1doZW5Jbml0TGV2ZWxIaWdoZXIoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgbGV2ZWw6IG51bWJlcil7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIG91dHN0YW5kaW5nXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiA9PSBudWxsKXtcclxuXHRcdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHJcblx0XHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBsZXZlbCkge1xyXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHJlZmVyZW5jZSArIDEpLCAuLi5saW5lcy5zbGljZShyZWZlcmVuY2UyKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgY3JlYXRlQ2hhcnQodmF1bHQ6IFZhdWx0KTogUHJvbWlzZTxzdHJpbmc+e1xyXG5cdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBlYXJsaWVzdEZpbGUgPSBmaW5kRWFybGllc3RNb2RpZmllZEZpbGUoZmlsZXMpXHJcblx0XHQvL2xldCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZVxyXG5cdFx0Ly9pZiAoZWFybGllc3RGaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZSApe1xyXG5cdFx0Y29uc3QgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQubXRpbWVcclxuXHRcdC8vfVxyXG5cclxuXHRcdGxldCBtb250aENvdW50ZXIgPSAwIC8vZm9ybWF0KG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksICdNTScpO1xyXG5cdFx0bGV0IGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0Ly9jb25zdCBmaWxlRGF0ZU1vbnRoTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IGZpbGVEYXRlTW9udGhNYXBNb2QgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgbW9udGhjb3VudCA9IG1vbnRoc0JldHdlZW4obmV3IERhdGUoZWFybGllc3REYXRlKSwgbmV3IERhdGUoKSlcclxuXHRcdGxldCBkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdGxldCB5TGFiZWwgPSBcIlwiXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgY3JlYXRlZFxyXG5cdFx0Lyp3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9Ki9cclxuXHJcblx0XHRtb250aENvdW50ZXIgPSAwXHJcblx0XHRkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIG1vZGlmaWVkXHJcblx0XHR3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0eUxhYmVsID0geUxhYmVsICsgZGF0ZVN0cmluZyArIFwiLCBcIlxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH1cclxuXHRcdHlMYWJlbCA9IHlMYWJlbC5zbGljZSgwLHlMYWJlbC5sZW5ndGgtMilcclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHQvKmNvbnN0IGNyZWF0aW9uRGF0ZXMgPSBnZXRDcmVhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjcmVhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH0qL1xyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IG1vZCBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHRjb25zdCBtb2RpZmljYXRpb25EYXRlcyA9IGdldE1vZGlmaWNhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtb2RpZmljYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIGNyZWF0ZWRcclxuXHRcdC8qbGV0IGNoYXJTdHJpbmdDcmVhdGVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXApIHtcclxuXHRcdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkLnNsaWNlKDAsY2hhclN0cmluZ0NyZWF0ZWQubGVuZ3RoLTIpKi9cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgbW9kaWZpZWRcclxuXHRcdGxldCBjaGFyU3RyaW5nTW9kaWZpZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcE1vZCkge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBrZXk6ICR7a2V5fSwgdmFsdWU6ICR7dmFsdWV9YCk7XHJcblx0XHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQuc2xpY2UoMCxjaGFyU3RyaW5nTW9kaWZpZWQubGVuZ3RoLTIpXHJcblxyXG5cdFx0cmV0dXJuIGNyZWF0ZUNoYXJ0Rm9ybWF0KHlMYWJlbCwgY2hhclN0cmluZ01vZGlmaWVkLCB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBkZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWw6IFByb21pc2U8Ym9vbGVhbj4pe1xyXG5cdFx0bmV3TGV2ZWwudGhlbigocmVzdWx0OiBib29sZWFuKT0+IHtcclxuXHRcdFx0aWYocmVzdWx0KXtcclxuXHRcdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbCh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsLCBmYWxzZSlcclxuXHRcdFx0XHRuZXcgTm90aWNlKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coYGJhZGdlIGZvciBsZXZlbCAke3RoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWx9IGlzICR7YmFkZ2UubmFtZX0gLSAke2JhZGdlLmxldmVsfWApXHJcblx0XHRcdFx0dGhpcy5naXZlQmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgYmFkZ2UpXHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gMTtcclxuXHRcdFx0XHR0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlbW92ZUtleXNGcm9tRnJvbnRtYXR0ZXIoKSB7XHJcblx0XHQvL2NvbnN0IHsgVmF1bHQsIFRGaWxlIH0gPSB3aW5kb3cuYXBwO1xyXG5cdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHBcclxuXHRcdC8vY29uc3QgdmF1bHQgPSBWYXVsdC5yZW9wZW4oKTtcclxuXHJcblx0XHQvLyBHZXQgYWxsIE1hcmtkb3duIGZpbGVzIGluIHRoZSB2YXVsdFxyXG5cdFx0Ly9jb25zdCBtYXJrZG93bkZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZmlsZUNvdW50TWFwID0gYXdhaXQgZ2V0RmlsZUNvdW50TWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Zm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlQ291bnRNYXAua2V5cygpKSB7XHJcblx0XHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0RmlsZXMoKTtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IGZpbGVzLmZpbmQoZmlsZSA9PiBmaWxlLmJhc2VuYW1lID09PSBmaWxlTmFtZSk7XHJcblx0XHRcdGlmICghZmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGVOYW1lfSBub3QgZm91bmQuYCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9jb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBuZXcgTm90aWNlKGBSZW1vdmVkIHNwZWNpZmllZCBrZXlzIGZyb20gZnJvbnRtYXR0ZXIgZnJvbSBmaWxlIFxcXCIke2ZpbGVOYW1lfVxcXCIuYCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB3aGljaExldmVsTmV4dEJhZGdlKGN1cnJlbnRMZXZlbDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+e1xyXG5cdFx0bGV0IG5leHRCYWRnZUxldmVsID0gMFxyXG5cdFx0Zm9yIChsZXQgaSA9IGN1cnJlbnRMZXZlbDsgaSA8IDExMDsgaSsrKXtcclxuXHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoaSwgdHJ1ZSlcclxuXHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRjb25zdCBtYXRjaCA9IGJhZGdlLmxldmVsLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gY3VycmVudExldmVsICYmIG5leHRCYWRnZUxldmVsID09IDAgKSB7XHJcblx0XHRcdFx0XHRuZXh0QmFkZ2VMZXZlbCA9IGxldmVsTnVtYmVyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5leHRCYWRnZUxldmVsXHJcblx0fVxyXG5cclxuXHRhc3luYyBib29zdGVyRm9ySW5pdCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cdFx0Y29uc3QgbmV4dEJhZGdlQXQgPSBhd2FpdCB0aGlzLndoaWNoTGV2ZWxOZXh0QmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbClcclxuXHRcdGNvbnN0IHN0YXR1c1BvaW50c1RvUmVhY2ggPSBzdGF0dXNQb2ludHNGb3JMZXZlbChuZXh0QmFkZ2VBdClcclxuXHRcdC8vY29uc29sZS5sb2coYHN0YXR1c1BvaW50c1RvUmVhY2ggZm9yIG5leHQgQmFkZ2U6ICR7c3RhdHVzUG9pbnRzVG9SZWFjaH1gKVxyXG5cdFx0Ly8gNTAgTm90ZXMgZnJvbSBMZXZlbCAxIHRvIDUgdG8gZ2V0IHRoZSBmaXJzdCBiYWRnZS5cclxuXHRcdC8vIDMwMCBQb2ludHMgaW4gYXZlcmFnZSBmb3IgYSBOb3RlLlxyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9IE1hdGgucm91bmQoKHN0YXR1c1BvaW50c1RvUmVhY2ggLSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cykvNTAvMzAwKTtcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gYm9vc3RlckZhY3RvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IHRydWVcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdC8vY29uc29sZS5sb2coYGJvb3N0ZXJGYWt0b3I6ICR7Ym9vc3RlckZhY3Rvcn1gKVxyXG5cdFx0cmV0dXJuIGJvb3N0ZXJGYWN0b3JcclxuXHR9XHJcblxyXG5cdGFzeW5jIG9wZW5BdmF0YXJGaWxlKCkge1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHt0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSl7XHJcblx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpPy5wYXRoIHx8ICcnO1xyXG5cdFx0XHRhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChleGlzdGluZ0ZpbGUucGF0aCwgc291cmNlUGF0aCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIkZpbGUgbm90IGZvdW5kIG9yIHVuYWJsZSB0byBvcGVuLlwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaXNTYW1lRGF5KGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3QgY3VycmVudERhdGUgPSB3aW5kb3cubW9tZW50KCk7IC8vIEdldCB0aGUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGN1cnJlbnREYXRlLmlzU2FtZShpbnB1dERhdGUsICdkYXknKTsgLy8gQ2hlY2sgaWYgdGhleSBhcmUgdGhlIHNhbWUgZGF5XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzT25lRGF5QmVmb3JlKGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3Qgb25lRGF5QmVmb3JlQ3VycmVudCA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5Jyk7IC8vIENhbGN1bGF0ZSBvbmUgZGF5IGJlZm9yZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gaW5wdXREYXRlLmlzU2FtZShvbmVEYXlCZWZvcmVDdXJyZW50LCAnZGF5Jyk7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUF2YXRhckZpbGUoYXBwOiBBcHAsIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHQvL3NldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHQvLyBEZWZpbmUgdGhlIGZpbGUgbmFtZSBhbmQgY29udGVudFxyXG5cdC8vY29uc3QgZmlsZU5hbWUgPSAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJzsgLy8gdGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZTtcclxuXHQvL2NvbnNvbGUubG9nKGBmaWxlTmFtZTogJHtmaWxlTmFtZX1gKVxyXG5cclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2ZpbGVOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHtmaWxlTmFtZX0ubWQgYWxyZWFkeSBleGlzdHNgKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblx0Ly8gQ3JlYXRlIHRoZSBmaWxlIGluIHRoZSByb290IG9mIHRoZSB2YXVsdFxyXG5cdGF3YWl0IGFwcC52YXVsdC5jcmVhdGUoYCR7ZmlsZU5hbWV9Lm1kYCwgYXZhdGFySW5pdENvbnRlbnQpO1xyXG5cclxufVxyXG5cclxuXHJcbmNsYXNzIE1vZGFsSW5mb3JtYXRpb25ib3ggZXh0ZW5kcyBNb2RhbCB7XHJcblx0cHJpdmF0ZSByZWFkb25seSBkaXNwbGF5VGV4dDogc3RyaW5nOyAvLyBTdG9yZSB0aGUgdGV4dCB0byBiZSBkaXNwbGF5ZWRcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIGRpc3BsYXlUZXh0OiBzdHJpbmcpIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0XHR0aGlzLmRpc3BsYXlUZXh0ID0gZGlzcGxheVRleHQ7IC8vIFN0b3JlIHRoZSBwYXNzZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25PcGVuKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuc2V0VGV4dCh0aGlzLmRpc3BsYXlUZXh0KTsgLy8gVXNlIHRoZSBzdG9yZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25DbG9zZSgpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUZvcm1hdFN0cmluZ3MobGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKSB7XHJcblx0Y29uc3QgYWN0aXZlVmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XHJcblxyXG5cdGlmICghYWN0aXZlVmlldykge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIGFjdGl2ZSBNYXJrZG93biB2aWV3IGZvdW5kLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGNvbnN0IGVkaXRvciA9IGFjdGl2ZVZpZXcuZWRpdG9yO1xyXG5cdGNvbnN0IHNlbGVjdGVkVGV4dCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHJcblx0aWYgKCFzZWxlY3RlZFRleHQpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyB0ZXh0IHNlbGVjdGVkIChmb3IgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzd2l0Y2ggTGF5ZXIgMiAmIDMpLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGxldCByZXBsYWNlZFRleHQgPSBzZWxlY3RlZFRleHQucmVwbGFjZUFsbChsYXllcjIsIFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIpO1xyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKGxheWVyMywgXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiLCBsYXllcjIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIiwgbGF5ZXIzKVxyXG5cclxuXHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihyZXBsYWNlZFRleHQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGxldCByYXRpbmdGYWt0b3I6IG51bWJlclxyXG5cdGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gcmF0aW5nTmV3IC0gcGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZ0Zha3RvciA9IDBcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdGYWt0b3JcclxufVxyXG5cclxuXHJcblxyXG4gIFxyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuIiwgImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCBnYW1pZmljYXRpb24gZnJvbSAnLi9tYWluJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogUGFydGlhbDxJU2V0dGluZ3M+ID0ge1xuICBlbmFibGVJbml0Q29tbWFuZDogdHJ1ZSxcbiAgYmluZEVudGVyOiB0cnVlLFxuICBiaW5kVGFiOiB0cnVlLFxuICBhdmF0YXJQYWdlTmFtZTogJ0F2YXRhciAtIEdhbWlmaWNhdGlvbicsXG4gIHRhZ3NFeGNsdWRlOiAnJyxcbiAgZm9sZGVyRXhjbHVkZTogJ0V4Y2FsaWRyYXcnLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogJz09JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6ICcqKicsXG4gIG51bUFsbEZpbGVzOiAxLFxuICBudW1BbGxGaWxlc0NvdW50OiAwLFxuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiAwLFxuICBzdGF0dXNQb2ludHM6IDAsXG4gIHN0YXR1c0xldmVsOiAxLFxuICB4cEZvck5leHRMZXZlbDogMTAwMCxcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiAnMTIuMDguMjAyMycsXG4gIGJhZGdlQm9vc3RlclN0YXRlOiBmYWxzZSxcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiAxLFxuICBkZWJ1ZzogZmFsc2UsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgc3RyZWFrYm9vc3RlcjogMCxcbiAgc3RyZWFrYm9vc3RlckRhdGU6ICcxMi4wOC4yMDIzJyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBzdHJpbmc7XG59XG5cblxuZXhwb3J0IGNsYXNzIEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBnYW1pZmljYXRpb247XG4gIFxuICBwdWJsaWMgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kVGFiOiBib29sZWFuO1xuICBwdWJsaWMgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgcHVibGljIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIHB1YmxpYyBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIHB1YmxpYyBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHB1YmxpYyB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgcHVibGljIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBwdWJsaWMgZGVidWc6IGJvb2xlYW47XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlckRhdGU6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBnYW1pZmljYXRpb24pIHtcblx0ICBzdXBlcihhcHAsIHBsdWdpbik7XG5cdCAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cbiAgXG5cdHB1YmxpYyBkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Y29udGFpbmVyRWwuYWRkQ2xhc3MoXCJleGNhbGlkcmF3LXNldHRpbmdzXCIpO1xuXHRcdHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcblxuXHRcdGNvbnN0IGNvZmZlZURpdiA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdihcImNvZmZlZVwiKTtcblx0XHRjb2ZmZWVEaXYuYWRkQ2xhc3MoXCJleC1jb2ZmZWUtZGl2XCIpO1xuXHRcdGNvbnN0IGNvZmZlZUxpbmsgPSBjb2ZmZWVEaXYuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRocmVmOiBcImh0dHBzOi8va28tZmkuY29tL2FuZHJlYXN0cmViaW5nXCIsXG5cdFx0fSk7XG5cdFx0Y29uc3QgY29mZmVlSW1nID0gY29mZmVlTGluay5jcmVhdGVFbChcImltZ1wiLCB7XG5cdFx0YXR0cjoge1xuXHRcdFx0c3JjOiBcImh0dHBzOi8vY2RuLmtvLWZpLmNvbS9jZG4va29maTMucG5nP3Y9M1wiLFxuXHRcdH0sXG5cdFx0fSk7XG5cdFx0Y29mZmVlSW1nLmhlaWdodCA9IDQ1O1xuXG5cdFx0Ly9jb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXHRcdC8vY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgXG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnR2FtaWZ5IHlvdXIgUEtNIC0gU2V0dGluZ3MnIH0pO1xuXHRcdGNvbnNvbGUubG9nKCdzZXR0aW5ncyBjYWxsZWQnKVxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJyN0YWdzIHRvIGlnbm9yZScpXG5cdFx0XHQuc2V0RGVzYygnZW50ZXIgdGFncyB3aXRob3V0ICMgYW5kIHNlcGFyYXRlIHdpdGggXCIsIFwiLlxcbkluY2x1ZGUgbmVzdGVkIHRhZ3MuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgdGFnMSwgdGFnMi9zdWJ0YWcsIFx1MjAyNicpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdFx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdmb2xkZXIgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciBmb2xkZXIgd2hpY2hzIGNvbnRlbnQgc2hhbGwgYmUgaWdub3JlZC4gU2VwYXJhdGUgd2l0aCBcIiwgXCIuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgZm9sZGVyMSwgZm9sZGVyMiwgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9maWxlIFBhZ2UgTmFtZScpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2UgaGVyZSB0aGUgbmFtZSBvZiB5b3VyIHByb2ZpbGUgcGFnZSBpZiB5b3UgbGlrZS4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCduYW1lJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cdFx0XHRcdFxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ090aGVyIFNldHRpbmdzJyB9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdEaXNhYmxlIEluaXQgQ29tbWFuZCcpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiByZW1vdmUgdGhlIGluaXQgY29tbWFuZCBmcm9tIGNvbW1hbmQgcHJvbXB0IGJ5IHN3aXRjaGluZyBvZmYuXFxucmVzdGFydCBuZWVkZWQuJylcblx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4gXG5cdFx0XHRcdHRvZ2dsZVxuICAgICAgICAgIFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpXG4gICAgICAgIFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kID0gdmFsdWU7XG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgXHRcdFx0fSksXG5cdFx0XHQpO1xuXG5cdFx0XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnbGltaXQgdGhlIHZpc2libGUgbW9udGggaW4gdGhlIGNoYXJ0IG9uIHlvdXIgYXZhdGFyIHBhZ2U6ICcgKyB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdC5zZXREZXNjKCdpZiAwLCBhbGwgbW9udGggd2lsbCBiZSBzaG93bi4gRW50ZXIgYSBudW1iZXIgaG93IG1hbnkgbW9udGggc2hhbGwgYmUgc2hvd24uJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTnVtYmVyIG9mIE1vbnRoIHRvIHNob3cnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlLnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cbiAgXG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9ncmVzc2l2ZSBTdW1tYXJpemF0aW9uJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSB3aGljaCBmb3JtYXR0aW5nIHlvdSB1c2UgZm9yIExheWVyIDIgYW5kIDMuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMiBpcyB1c3VhbGx5ICoqJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSlcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMyBpcyB1c3VhbGx5ID09Jylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0fSkpO1xuXG5cdH1cbiAgfSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1aXJlZEFyZ3MocmVxdWlyZWQsIGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgcmVxdWlyZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHJlcXVpcmVkICsgJyBhcmd1bWVudCcgKyAocmVxdWlyZWQgPiAxID8gJ3MnIDogJycpICsgJyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3MubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgZGF0ZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZShOYU4pKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBzb21lIHZhbHVlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKCcyMDE0LTAyLTMxJylcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIG9iamVjdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSh7fSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTtcblxuICAvLyBDbG9uZSB0aGUgZGF0ZVxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YoYXJndW1lbnQpID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjc3RyaW5nLWFyZ3VtZW50c1wiKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufSIsICJpbXBvcnQgaXNEYXRlIGZyb20gXCIuLi9pc0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNWYWxpZFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB2YWxpZD9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgZmFsc2UgaWYgYXJndW1lbnQgaXMgSW52YWxpZCBEYXRlIGFuZCB0cnVlIG90aGVyd2lzZS5cbiAqIEFyZ3VtZW50IGlzIGNvbnZlcnRlZCB0byBEYXRlIHVzaW5nIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBJbnZhbGlkIERhdGUgaXMgYSBEYXRlLCB3aG9zZSB0aW1lIHZhbHVlIGlzIE5hTi5cbiAqXG4gKiBUaW1lIHZhbHVlIG9mIERhdGU6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuOS4xLjFcbiAqXG4gKiBAcGFyYW0geyp9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlIGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgyMDE0LCAxLCAzMSkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWx1ZSwgY29udmVydGFibGUgaW50byBhIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKDEzOTM4MDQ4MDAwMDApXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKCcnKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNWYWxpZChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIGlmICghaXNEYXRlKGRpcnR5RGF0ZSkgJiYgdHlwZW9mIGRpcnR5RGF0ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgcmV0dXJuICFpc05hTihOdW1iZXIoZGF0ZSkpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufSIsICJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdGltZXN0YW1wID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59IiwgImltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSBcIi4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9EQVkgPSA4NjQwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0RheU9mWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZZZWFyVGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIHZhciBkaWZmZXJlbmNlID0gdGltZXN0YW1wIC0gc3RhcnRPZlllYXJUaW1lc3RhbXA7XG4gIHJldHVybiBNYXRoLmZsb29yKGRpZmZlcmVuY2UgLyBNSUxMSVNFQ09ORFNfSU5fREFZKSArIDE7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSAxO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgeWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSk7XG4gIHZhciBmb3VydGhPZkphbnVhcnkgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5KTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENJU09XZWVrKGRhdGUpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkYXRlKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgInZhciBkZWZhdWx0T3B0aW9ucyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykge1xuICBkZWZhdWx0T3B0aW9ucyA9IG5ld09wdGlvbnM7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8ud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZmlyc3RXZWVrT2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWtPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mVGhpc1llYXIsIG9wdGlvbnMpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuICB2YXIgeWVhciA9IGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWsgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vlay5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWssIG9wdGlvbnMpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ1dlZWsoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlciwgdGFyZ2V0TGVuZ3RoKSB7XG4gIHZhciBzaWduID0gbnVtYmVyIDwgMCA/ICctJyA6ICcnO1xuICB2YXIgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpO1xuICB3aGlsZSAob3V0cHV0Lmxlbmd0aCA8IHRhcmdldExlbmd0aCkge1xuICAgIG91dHB1dCA9ICcwJyArIG91dHB1dDtcbiAgfVxuICByZXR1cm4gc2lnbiArIG91dHB1dDtcbn0iLCAiaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqL1xudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuXG4gICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09ICd5eScgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbikge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICByZXR1cm4gdG9rZW4gPT09ICdNJyA/IFN0cmluZyhtb250aCArIDEpIDogYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENEYXRlKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRVVENIb3VycygpIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlWzBdO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSAnYW0nID8gJ2EubS4nIDogJ3AubS4nO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDTWludXRlcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgIHZhciBmcmFjdGlvbmFsU2Vjb25kcyA9IE1hdGguZmxvb3IobWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMykpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZnJhY3Rpb25hbFNlY29uZHMsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJpbXBvcnQgZ2V0VVRDRGF5T2ZZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0RheU9mWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuaW1wb3J0IGxpZ2h0Rm9ybWF0dGVycyBmcm9tIFwiLi4vbGlnaHRGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG52YXIgZGF5UGVyaW9kRW51bSA9IHtcbiAgYW06ICdhbScsXG4gIHBtOiAncG0nLFxuICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgbm9vbjogJ25vb24nLFxuICBtb3JuaW5nOiAnbW9ybmluZycsXG4gIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgbmlnaHQ6ICduaWdodCdcbn07XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCBNaWxsaXNlY29uZHMgaW4gZGF5ICAgICAgICAgICAgfFxuICogfCAgYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgfCAgQiAgfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgfFxuICogfCAgYyAgfCBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlayAgfCAgQyogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZSAgfCBMb2NhbCBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgfCAgRSAgfCBEYXkgb2Ygd2VlayAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRiogfCBEYXkgb2Ygd2VlayBpbiBtb250aCAgICAgICAgICAgfFxuICogfCAgZyogfCBNb2RpZmllZCBKdWxpYW4gZGF5ICAgICAgICAgICAgfCAgRyAgfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaSEgfCBJU08gZGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgfCAgSSEgfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgfFxuICogfCAgaiogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfCAgSiogfCBMb2NhbGl6ZWQgaG91ciB3L28gZGF5IHBlcmlvZCAgfFxuICogfCAgayAgfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgfCAgSyAgfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbCogfCAoZGVwcmVjYXRlZCkgICAgICAgICAgICAgICAgICAgfCAgTCAgfCBTdGFuZC1hbG9uZSBtb250aCAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbyEgfCBPcmRpbmFsIG51bWJlciBtb2RpZmllciAgICAgICAgfCAgTyAgfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgfFxuICogfCAgcCEgfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgfCAgUCEgfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgfFxuICogfCAgcSAgfCBTdGFuZC1hbG9uZSBxdWFydGVyICAgICAgICAgICAgfCAgUSAgfCBRdWFydGVyICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgciogfCBSZWxhdGVkIEdyZWdvcmlhbiB5ZWFyICAgICAgICAgfCAgUiEgfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgdCEgfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgfCAgVCEgfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgfFxuICogfCAgdSAgfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgfCAgVSogfCBDeWNsaWMgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgdiogfCBUaW1lem9uZSAoZ2VuZXJpYyBub24tbG9jYXQuKSAgfCAgViogfCBUaW1lem9uZSAobG9jYXRpb24pICAgICAgICAgICAgfFxuICogfCAgdyAgfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgfCAgVyogfCBXZWVrIG9mIG1vbnRoICAgICAgICAgICAgICAgICAgfFxuICogfCAgeCAgfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgfCAgWCAgfCBUaW1lem9uZSAoSVNPLTg2MDEpICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgfFxuICogfCAgeiAgfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgfCAgWiogfCBUaW1lem9uZSAoYWxpYXNlcykgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAhIGFyZSBub24tc3RhbmRhcmQsIGJ1dCBpbXBsZW1lbnRlZCBieSBkYXRlLWZuczpcbiAqIC0gYG9gIG1vZGlmaWVzIHRoZSBwcmV2aW91cyB0b2tlbiB0byB0dXJuIGl0IGludG8gYW4gb3JkaW5hbCAoc2VlIGBmb3JtYXRgIGRvY3MpXG4gKiAtIGBpYCBpcyBJU08gZGF5IG9mIHdlZWsuIEZvciBgaWAgYW5kIGBpaWAgaXMgcmV0dXJucyBudW1lcmljIElTTyB3ZWVrIGRheXMsXG4gKiAgIGkuZS4gNyBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAqIC0gYElgIGlzIElTTyB3ZWVrIG9mIHllYXIsIGFzIG9wcG9zZWQgdG8gYHdgIHdoaWNoIGlzIGxvY2FsIHdlZWsgb2YgeWVhci5cbiAqIC0gYFJgIGlzIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLCBhcyBvcHBvc2VkIHRvIGBZYCB3aGljaCBpcyBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogICBgUmAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJYCBhbmQgYGlgXG4gKiAgIGZvciB1bml2ZXJzYWwgSVNPIHdlZWstbnVtYmVyaW5nIGRhdGUsIHdoZXJlYXNcbiAqICAgYFlgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgd2AgYW5kIGBlYFxuICogICBmb3Igd2Vlay1udW1iZXJpbmcgZGF0ZSBzcGVjaWZpYyB0byB0aGUgbG9jYWxlLlxuICogLSBgUGAgaXMgbG9uZyBsb2NhbGl6ZWQgZGF0ZSBmb3JtYXRcbiAqIC0gYHBgIGlzIGxvbmcgbG9jYWxpemVkIHRpbWUgZm9ybWF0XG4gKi9cblxudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIEVyYVxuICBHOiBmdW5jdGlvbiBHKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBlcmEgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgPiAwID8gMSA6IDA7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gQUQsIEJDXG4gICAgICBjYXNlICdHJzpcbiAgICAgIGNhc2UgJ0dHJzpcbiAgICAgIGNhc2UgJ0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBBLCBCXG4gICAgICBjYXNlICdHR0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcbiAgICAgIGNhc2UgJ0dHR0cnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAneW8nKSB7XG4gICAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoeWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnkoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFk6IGZ1bmN0aW9uIFkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHNpZ25lZFdlZWtZZWFyID0gZ2V0VVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgd2Vla1llYXIgPSBzaWduZWRXZWVrWWVhciA+IDAgPyBzaWduZWRXZWVrWWVhciA6IDEgLSBzaWduZWRXZWVrWWVhcjtcblxuICAgIC8vIFR3byBkaWdpdCB5ZWFyXG4gICAgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgICB2YXIgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7XG4gICAgfVxuXG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICdZbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIFIoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgaXNvV2Vla1llYXIgPSBnZXRVVENJU09XZWVrWWVhcihkYXRlKTtcblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBFeHRlbmRlZCB5ZWFyLiBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZyB0aGUgeWVhciBvZiB0aGlzIGNhbGVuZGFyIHN5c3RlbS5cbiAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIGxvY2FsaXplcnMgYXJlIEIuQy4geWVhcnM6XG4gIC8vIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gIC8vIHwtLS0tLS18LS0tLS18LS0tLS18XG4gIC8vIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gIC8vIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gIC8vIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gIC8vIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAgLy8gd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkLlxuICB1OiBmdW5jdGlvbiB1KGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBRdWFydGVyXG4gIFE6IGZ1bmN0aW9uIFEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAnUSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAnUVEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdRbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAnUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAnUVFRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdRUVFRJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcTogZnVuY3Rpb24gcShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdxJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdxcSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ3FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdxcXFxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ3FxcXEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnTSc6XG4gICAgICBjYXNlICdNTSc6XG4gICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdNbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ01NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTU1NTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ01NTU0nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbiBMKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhtb250aCArIDEpO1xuICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMTCc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ0xvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdMTExMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTExMTCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIHdlZWsgb2YgeWVhclxuICB3OiBmdW5jdGlvbiB3KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciB3ZWVrID0gZ2V0VVRDV2VlayhkYXRlLCBvcHRpb25zKTtcbiAgICBpZiAodG9rZW4gPT09ICd3bycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIEkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGlzb1dlZWsgPSBnZXRVVENJU09XZWVrKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvV2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdkbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDRGF0ZSgpLCB7XG4gICAgICAgIHVuaXQ6ICdkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IGZ1bmN0aW9uIEQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mWWVhciA9IGdldFVUQ0RheU9mWWVhcihkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdEbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwge1xuICAgICAgICB1bml0OiAnZGF5T2ZZZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF5T2ZZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2Ygd2Vla1xuICBFOiBmdW5jdGlvbiBFKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnRSc6XG4gICAgICBjYXNlICdFRSc6XG4gICAgICBjYXNlICdFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ0VFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ0VFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnRUVFRSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgZGF5IG9mIHdlZWtcbiAgZTogZnVuY3Rpb24gZShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbilcbiAgICAgIGNhc2UgJ2UnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2VlJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2VvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2VlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnZWVlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdlZWVlJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiBmdW5jdGlvbiBjKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoc2FtZSBhcyBpbiBgZWApXG4gICAgICBjYXNlICdjJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2NvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnY2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdjY2NjJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBJU08gZGF5IG9mIHdlZWtcbiAgaTogZnVuY3Rpb24gaShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgaXNvRGF5T2ZXZWVrID0gZGF5T2ZXZWVrID09PSAwID8gNyA6IGRheU9mV2VlaztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAyXG4gICAgICBjYXNlICdpJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcbiAgICAgIGNhc2UgJ2lpJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29EYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAybmRcbiAgICAgIGNhc2UgJ2lvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ2lpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnaWlpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdpaWlpJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0sIFBNLCBtaWRuaWdodCwgbm9vblxuICBiOiBmdW5jdGlvbiBiKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA9PT0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYic6XG4gICAgICBjYXNlICdiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2JiYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiYic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiBCKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA+PSAxNykge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ldmVuaW5nO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uYWZ0ZXJub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gNCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5tb3JuaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5pZ2h0O1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdCJzpcbiAgICAgIGNhc2UgJ0JCJzpcbiAgICAgIGNhc2UgJ0JCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2hvJykge1xuICAgICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMTI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ0hvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENIb3VycygpLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIEsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgaWYgKHRva2VuID09PSAnS28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFsxLTI0XVxuICBrOiBmdW5jdGlvbiBrKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7XG4gICAgaWYgKHRva2VuID09PSAna28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdtbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDTWludXRlcygpLCB7XG4gICAgICAgIHVuaXQ6ICdtaW51dGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5tKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnc28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ1NlY29uZHMoKSwge1xuICAgICAgICB1bml0OiAnc2Vjb25kJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5TKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGFsd2F5cyBgJ1onYClcbiAgWDogZnVuY3Rpb24gWChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuICdaJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ1gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgXG4gICAgICBjYXNlICdYWFhYJzpcbiAgICAgIGNhc2UgJ1hYJzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGBcbiAgICAgIGNhc2UgJ1hYWFhYJzpcbiAgICAgIGNhc2UgJ1hYWCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgeDogZnVuY3Rpb24geChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICd4JzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuICAgICAgY2FzZSAneHh4eCc6XG4gICAgICBjYXNlICd4eCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG4gICAgICBjYXNlICd4eHh4eCc6XG4gICAgICBjYXNlICd4eHgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChHTVQpXG4gIE86IGZ1bmN0aW9uIE8oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAnTyc6XG4gICAgICBjYXNlICdPTyc6XG4gICAgICBjYXNlICdPT08nOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnT09PTyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pXG4gIHo6IGZ1bmN0aW9uIHooZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAneic6XG4gICAgICBjYXNlICd6eic6XG4gICAgICBjYXNlICd6enonOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnenp6eic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIHQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gTWF0aC5mbG9vcihvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gVChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBvcmlnaW5hbERhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApO1xuICB2YXIgbWludXRlcyA9IGFic09mZnNldCAlIDYwO1xuICBpZiAobWludXRlcyA9PT0gMCkge1xuICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTtcbiAgfVxuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkge1xuICAgIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpO1xuICB9XG4gIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCksIDIpO1xuICB2YXIgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAidmFyIGRhdGVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIHRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gdGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAncHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHBwJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHZhciBtYXRjaFJlc3VsdCA9IHBhdHRlcm4ubWF0Y2goLyhQKykocCspPy8pIHx8IFtdO1xuICB2YXIgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgdmFyIHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07XG4gIGlmICghdGltZVBhdHRlcm4pIHtcbiAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZyk7XG4gIH1cbiAgdmFyIGRhdGVUaW1lRm9ybWF0O1xuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0LnJlcGxhY2UoJ3t7ZGF0ZX19JywgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcpKS5yZXBsYWNlKCd7e3RpbWV9fScsIHRpbWVMb25nRm9ybWF0dGVyKHRpbWVQYXR0ZXJuLCBmb3JtYXRMb25nKSk7XG59O1xudmFyIGxvbmdGb3JtYXR0ZXJzID0ge1xuICBwOiB0aW1lTG9uZ0Zvcm1hdHRlcixcbiAgUDogZGF0ZVRpbWVMb25nRm9ybWF0dGVyXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9uZ0Zvcm1hdHRlcnM7IiwgIi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkpO1xuICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIHJldHVybiBkYXRlLmdldFRpbWUoKSAtIHV0Y0RhdGUuZ2V0VGltZSgpO1xufSIsICJ2YXIgcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zID0gWydEJywgJ0REJ107XG52YXIgcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMgPSBbJ1lZJywgJ1lZWVknXTtcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgaWYgKHRva2VuID09PSAnWVlZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnRCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnREQnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9XG59IiwgInZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIHNlY29uZCcsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIHhTZWNvbmRzOiB7XG4gICAgb25lOiAnMSBzZWNvbmQnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIGhhbGZBTWludXRlOiAnaGFsZiBhIG1pbnV0ZScsXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBtaW51dGUnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICB4TWludXRlczoge1xuICAgIG9uZTogJzEgbWludXRlJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgaG91cicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhIb3Vyczoge1xuICAgIG9uZTogJzEgaG91cicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhEYXlzOiB7XG4gICAgb25lOiAnMSBkYXknLFxuICAgIG90aGVyOiAne3tjb3VudH19IGRheXMnXG4gIH0sXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB3ZWVrJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgeFdlZWtzOiB7XG4gICAgb25lOiAnMSB3ZWVrJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgYWJvdXRYTW9udGhzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBtb250aCcsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICB4TW9udGhzOiB7XG4gICAgb25lOiAnMSBtb250aCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIHhZZWFyczoge1xuICAgIG9uZTogJzEgeWVhcicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6ICdvdmVyIDEgeWVhcicsXG4gICAgb3RoZXI6ICdvdmVyIHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiAnYWxtb3N0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhbG1vc3Qge3tjb3VudH19IHllYXJzJ1xuICB9XG59O1xudmFyIGZvcm1hdERpc3RhbmNlID0gZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UodG9rZW4sIGNvdW50LCBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQ7XG4gIHZhciB0b2tlblZhbHVlID0gZm9ybWF0RGlzdGFuY2VMb2NhbGVbdG9rZW5dO1xuICBpZiAodHlwZW9mIHRva2VuVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZSgne3tjb3VudH19JywgY291bnQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gJ2luICcgKyByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAnIGFnbyc7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGlzdGFuY2U7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRm9ybWF0TG9uZ0ZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgLy8gVE9ETzogUmVtb3ZlIFN0cmluZygpXG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgIHZhciBmb3JtYXQgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkRm9ybWF0TG9uZ0ZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuL2luZGV4LmpzXCI7XG52YXIgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdFRUVFLCBNTU1NIGRvLCB5JyxcbiAgbG9uZzogJ01NTU0gZG8sIHknLFxuICBtZWRpdW06ICdNTU0gZCwgeScsXG4gIHNob3J0OiAnTU0vZGQveXl5eSdcbn07XG52YXIgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdoOm1tOnNzIGEgenp6eicsXG4gIGxvbmc6ICdoOm1tOnNzIGEgeicsXG4gIG1lZGl1bTogJ2g6bW06c3MgYScsXG4gIHNob3J0OiAnaDptbSBhJ1xufTtcbnZhciBkYXRlVGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbWVkaXVtOiAne3tkYXRlfX0sIHt7dGltZX19JyxcbiAgc2hvcnQ6ICd7e2RhdGV9fSwge3t0aW1lfX0nXG59O1xudmFyIGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdExvbmc7IiwgInZhciBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6ICdQJ1xufTtcbnZhciBmb3JtYXRSZWxhdGl2ZSA9IGZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlKHRva2VuLCBfZGF0ZSwgX2Jhc2VEYXRlLCBfb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UmVsYXRpdmVMb2NhbGVbdG9rZW5dO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFJlbGF0aXZlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZExvY2FsaXplRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRpcnR5SW5kZXgsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogJ3N0YW5kYWxvbmUnO1xuICAgIHZhciB2YWx1ZXNBcnJheTtcbiAgICBpZiAoY29udGV4dCA9PT0gJ2Zvcm1hdHRpbmcnICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciB3aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBkZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1t3aWR0aF0gfHwgYXJncy5mb3JtYXR0aW5nVmFsdWVzW2RlZmF1bHRXaWR0aF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgX3dpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1tfd2lkdGhdIHx8IGFyZ3MudmFsdWVzW19kZWZhdWx0V2lkdGhdO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2soZGlydHlJbmRleCkgOiBkaXJ0eUluZGV4O1xuICAgIC8vIEB0cy1pZ25vcmU6IEZvciBzb21lIHJlYXNvbiBUeXBlU2NyaXB0IGp1c3QgZG9uJ3Qgd2FudCB0byBtYXRjaCBpdCwgbm8gbWF0dGVyIGhvdyBoYXJkIHdlIHRyeS4gSSBjaGFsbGVuZ2UgeW91IHRvIHRyeSB0byByZW1vdmUgaXQhXG4gICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4XTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTG9jYWxpemVGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanNcIjtcbnZhciBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydCJywgJ0EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnQkMnLCAnQUQnXSxcbiAgd2lkZTogWydCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJ11cbn07XG52YXIgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbJzEnLCAnMicsICczJywgJzQnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnUTEnLCAnUTInLCAnUTMnLCAnUTQnXSxcbiAgd2lkZTogWycxc3QgcXVhcnRlcicsICcybmQgcXVhcnRlcicsICczcmQgcXVhcnRlcicsICc0dGggcXVhcnRlciddXG59O1xuXG4vLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG52YXIgbW9udGhWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydKJywgJ0YnLCAnTScsICdBJywgJ00nLCAnSicsICdKJywgJ0EnLCAnUycsICdPJywgJ04nLCAnRCddLFxuICBhYmJyZXZpYXRlZDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuICB3aWRlOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXVxufTtcbnZhciBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ10sXG4gIHNob3J0OiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXG4gIGFiYnJldmlhdGVkOiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuICB3aWRlOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J11cbn07XG52YXIgZGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH1cbn07XG52YXIgZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9XG59O1xudmFyIG9yZGluYWxOdW1iZXIgPSBmdW5jdGlvbiBvcmRpbmFsTnVtYmVyKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykge1xuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICAvLyBJZiBvcmRpbmFsIG51bWJlcnMgZGVwZW5kIG9uIGNvbnRleHQsIGZvciBleGFtcGxlLFxuICAvLyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCBncmFtbWF0aWNhbCBnZW5kZXJzLFxuICAvLyB1c2UgYG9wdGlvbnMudW5pdGAuXG4gIC8vXG4gIC8vIGB1bml0YCBjYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RhdGUnLCAnZGF5T2ZZZWFyJyxcbiAgLy8gJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLlxuXG4gIHZhciByZW0xMDAgPSBudW1iZXIgJSAxMDA7XG4gIGlmIChyZW0xMDAgPiAyMCB8fCByZW0xMDAgPCAxMCkge1xuICAgIHN3aXRjaCAocmVtMTAwICUgMTApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdzdCc7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnbmQnO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3JkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bWJlciArICd0aCc7XG59O1xudmFyIGxvY2FsaXplID0ge1xuICBvcmRpbmFsTnVtYmVyOiBvcmRpbmFsTnVtYmVyLFxuICBlcmE6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBlcmFWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IGZ1bmN0aW9uIGFyZ3VtZW50Q2FsbGJhY2socXVhcnRlcikge1xuICAgICAgcmV0dXJuIHF1YXJ0ZXIgLSAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogbW9udGhWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogJ3dpZGUnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxpemU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGg7XG4gICAgdmFyIG1hdGNoUGF0dGVybiA9IHdpZHRoICYmIGFyZ3MubWF0Y2hQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5tYXRjaFBhdHRlcm5zW2FyZ3MuZGVmYXVsdE1hdGNoV2lkdGhdO1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChtYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG4gICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkocGFyc2VQYXR0ZXJucykgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSkgOiBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59XG5mdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkgJiYgcHJlZGljYXRlKG9iamVjdFtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoUGF0dGVybkZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MubWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7XG4gICAgaWYgKCFwYXJzZVJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKHBhcnNlUmVzdWx0WzBdKSA6IHBhcnNlUmVzdWx0WzBdO1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59IiwgImltcG9ydCBidWlsZE1hdGNoRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaEZuL2luZGV4LmpzXCI7XG5pbXBvcnQgYnVpbGRNYXRjaFBhdHRlcm5GbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuL2luZGV4LmpzXCI7XG52YXIgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKHRofHN0fG5kfHJkKT8vaTtcbnZhciBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcbnZhciBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGJ8YSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGJcXC4/XFxzP2NcXC4/fGJcXC4/XFxzP2NcXC4/XFxzP2VcXC4/fGFcXC4/XFxzP2RcXC4/fGNcXC4/XFxzP2VcXC4/KS9pLFxuICB3aWRlOiAvXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2lcbn07XG52YXIgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL15iL2ksIC9eKGF8YykvaV1cbn07XG52YXIgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaVxufTtcbnZhciBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV1cbn07XG52YXIgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2lcbn07XG52YXIgcGFyc2VNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXmovaSwgL15mL2ksIC9ebS9pLCAvXmEvaSwgL15tL2ksIC9eai9pLCAvXmovaSwgL15hL2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXSxcbiAgYW55OiBbL15qYS9pLCAvXmYvaSwgL15tYXIvaSwgL15hcC9pLCAvXm1heS9pLCAvXmp1bi9pLCAvXmp1bC9pLCAvXmF1L2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXVxufTtcbnZhciBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pXG59O1xudmFyIHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXVxufTtcbnZhciBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaVxufTtcbnZhciBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL15hL2ksXG4gICAgcG06IC9ecC9pLFxuICAgIG1pZG5pZ2h0OiAvXm1pL2ksXG4gICAgbm9vbjogL15uby9pLFxuICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksXG4gICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksXG4gICAgZXZlbmluZzogL2V2ZW5pbmcvaSxcbiAgICBuaWdodDogL25pZ2h0L2lcbiAgfVxufTtcbnZhciBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKHZhbHVlKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH0pLFxuICBlcmE6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2soaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCArIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICdhbnknLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbWF0Y2g7IiwgImltcG9ydCBmb3JtYXREaXN0YW5jZSBmcm9tIFwiLi9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0TG9uZyBmcm9tIFwiLi9fbGliL2Zvcm1hdExvbmcvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRSZWxhdGl2ZSBmcm9tIFwiLi9fbGliL2Zvcm1hdFJlbGF0aXZlL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9jYWxpemUgZnJvbSBcIi4vX2xpYi9sb2NhbGl6ZS9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoIGZyb20gXCIuL19saWIvbWF0Y2gvaW5kZXguanNcIjtcbi8qKlxuICogQHR5cGUge0xvY2FsZX1cbiAqIEBjYXRlZ29yeSBMb2NhbGVzXG4gKiBAc3VtbWFyeSBFbmdsaXNoIGxvY2FsZSAoVW5pdGVkIFN0YXRlcykuXG4gKiBAbGFuZ3VhZ2UgRW5nbGlzaFxuICogQGlzby02MzktMiBlbmdcbiAqIEBhdXRob3IgU2FzaGEgS29zcyBbQGtvc3Nub2NvcnBde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9rb3Nzbm9jb3JwfVxuICogQGF1dGhvciBMZXNoYSBLb3NzIFtAbGVzaGFrb3NzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbGVzaGFrb3NzfVxuICovXG52YXIgbG9jYWxlID0ge1xuICBjb2RlOiAnZW4tVVMnLFxuICBmb3JtYXREaXN0YW5jZTogZm9ybWF0RGlzdGFuY2UsXG4gIGZvcm1hdExvbmc6IGZvcm1hdExvbmcsXG4gIGZvcm1hdFJlbGF0aXZlOiBmb3JtYXRSZWxhdGl2ZSxcbiAgbG9jYWxpemU6IGxvY2FsaXplLFxuICBtYXRjaDogbWF0Y2gsXG4gIG9wdGlvbnM6IHtcbiAgICB3ZWVrU3RhcnRzT246IDAgLyogU3VuZGF5ICovLFxuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMVxuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxlOyIsICJpbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vLi4vbG9jYWxlL2VuLVVTL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0TG9jYWxlOyIsICJpbXBvcnQgaXNWYWxpZCBmcm9tIFwiLi4vaXNWYWxpZC9pbmRleC5qc1wiO1xuaW1wb3J0IHN1Yk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9uZ0Zvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuLCBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4sIHRocm93UHJvdGVjdGVkRXJyb3IgfSBmcm9tIFwiLi4vX2xpYi9wcm90ZWN0ZWRUb2tlbnMvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qc1wiOyAvLyBUaGlzIFJlZ0V4cCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cyBzZXBhcmF0ZWQgYnkgYHxgOlxuLy8gLSBbeVlRcU1Md0lkRGVjaWhIS2ttc11vIG1hdGNoZXMgYW55IGF2YWlsYWJsZSBvcmRpbmFsIG51bWJlciB0b2tlblxuLy8gICAob25lIG9mIHRoZSBjZXJ0YWluIGxldHRlcnMgZm9sbG93ZWQgYnkgYG9gKVxuLy8gLSAoXFx3KVxcMSogbWF0Y2hlcyBhbnkgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIGxldHRlclxuLy8gLSAnJyBtYXRjaGVzIHR3byBxdW90ZSBjaGFyYWN0ZXJzIGluIGEgcm93XG4vLyAtICcoJyd8W14nXSkrKCd8JCkgbWF0Y2hlcyBhbnl0aGluZyBzdXJyb3VuZGVkIGJ5IHR3byBxdW90ZSBjaGFyYWN0ZXJzICgnKSxcbi8vICAgZXhjZXB0IGEgc2luZ2xlIHF1b3RlIHN5bWJvbCwgd2hpY2ggZW5kcyB0aGUgc2VxdWVuY2UuXG4vLyAgIFR3byBxdW90ZSBjaGFyYWN0ZXJzIGRvIG5vdCBlbmQgdGhlIHNlcXVlbmNlLlxuLy8gICBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBzaW5nbGUgcXVvdGVcbi8vICAgdGhlbiB0aGUgc2VxdWVuY2Ugd2lsbCBjb250aW51ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG4vLyAtIC4gbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciB1bm1hdGNoZWQgYnkgcHJldmlvdXMgcGFydHMgb2YgdGhlIFJlZ0V4cHNcbnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG4vLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG52YXIgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcbnZhciBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG52YXIgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbnZhciB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG5cbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqID4gXHUyNkEwXHVGRTBGIFBsZWFzZSBub3RlIHRoYXQgdGhlIGBmb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKiAoc2VlIHRoZSBsYXN0IGV4YW1wbGUpXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDcgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBBY2NlcHRlZCBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDB0aCwgMTd0aCAgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgMjAxN3RoICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgUiAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSICAgICAgfCAtNDMsIDAwLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAwLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAwLCAwMDAxLCAxOTAwLCAyMDE3ICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUsNyB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCB1ICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCA3ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhICAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWEgICAgIHwgYW0sIHBtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCBiLi5iYiAgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiICAgICB8IGFtLCBwbSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmIgICAgfCBhLm0uLCBwLm0uLCBub29uLCBtaWRuaWdodCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiYiAgIHwgYSwgcCwgbiwgbWkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgIHwgQi4uQkJCICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkIgICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCQiAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgIHwgaCAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAxMnRoICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaCAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhvICAgICAgfCAwdGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgIHwgSyAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAwdGggICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLSyAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgIHwgayAgICAgICB8IDI0LCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtvICAgICAgfCAyNHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrayAgICAgIHwgMjQsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbSAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbSAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcyAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcyAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDEsIC4uLiwgOTk5ICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICAgfCBPLi4uT09PIHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT09PTyAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pICB8IHouLi56enogfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCA2ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB6enp6ICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiw2ICAgfFxuICogfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgIHwgdCAgICAgICB8IDUxMjk2OTUyMCAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR0ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8IFAgICAgICAgfCAwNC8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUCAgICAgIHwgQXByIDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQICAgICB8IEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFAgICAgfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcCAgICAgfCAxMjowMDowMCBBTSBHTVQrMiAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHBwICAgIHwgMTI6MDA6MDAgQU0gR01UKzAyOjAwICAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBDb21iaW5hdGlvbiBvZiBkYXRlIGFuZCB0aW1lICAgIHwgUHAgICAgICB8IDA0LzI5LzE0NTMsIDEyOjAwIEFNICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQcHAgICAgfCBBcHIgMjksIDE0NTMsIDEyOjAwOjAwIEFNICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBwcHAgIHwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUHBwcHB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICB8IDIsNyAgIHxcbiAqIE5vdGVzOlxuICogMS4gXCJGb3JtYXR0aW5nXCIgdW5pdHMgKGUuZy4gZm9ybWF0dGluZyBxdWFydGVyKSBpbiB0aGUgZGVmYXVsdCBlbi1VUyBsb2NhbGVcbiAqICAgIGFyZSB0aGUgc2FtZSBhcyBcInN0YW5kLWFsb25lXCIgdW5pdHMsIGJ1dCBhcmUgZGlmZmVyZW50IGluIHNvbWUgbGFuZ3VhZ2VzLlxuICogICAgXCJGb3JtYXR0aW5nXCIgdW5pdHMgYXJlIGRlY2xpbmVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxhbmd1YWdlXG4gKiAgICBpbiB0aGUgY29udGV4dCBvZiBhIGRhdGUuIFwiU3RhbmQtYWxvbmVcIiB1bml0cyBhcmUgYWx3YXlzIG5vbWluYXRpdmUgc2luZ3VsYXI6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqIDIuIEFueSBzZXF1ZW5jZSBvZiB0aGUgaWRlbnRpY2FsIGxldHRlcnMgaXMgYSBwYXR0ZXJuLCB1bmxlc3MgaXQgaXMgZXNjYXBlZCBieVxuICogICAgdGhlIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIChzZWUgYmVsb3cpLlxuICogICAgSWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIGxpc3RlZCBpbiB0YWJsZSAoZS5nLiBgRUVFRUVFRUVFRUVgKVxuICogICAgdGhlIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRlZmF1bHQgcGF0dGVybiBmb3IgdGhpcyB1bml0LCB1c3VhbGx5XG4gKiAgICB0aGUgbG9uZ2VzdCBvbmUgKGluIGNhc2Ugb2YgSVNPIHdlZWtkYXlzLCBgRUVFRWApLiBEZWZhdWx0IHBhdHRlcm5zIGZvciB1bml0c1xuICogICAgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU0nKSAvLz0+ICdOb3YnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NJykgLy89PiAnTidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqIDMuIFNvbWUgcGF0dGVybnMgY291bGQgYmUgdW5saW1pdGVkIGxlbmd0aCAoc3VjaCBhcyBgeXl5eXl5eXlgKS5cbiAqICAgIFRoZSBvdXRwdXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB6ZXJvcyB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAneXl5eXl5eXknKSAvLz0+ICcwMDAwMjAxNydgXG4gKlxuICogNC4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNS4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAqICAgIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZDpcbiAqXG4gKiAgICB8IFllYXIgfCBgeXlgIHwgYHV1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gKiAgICB8IDEgICAgfCAgIDAxIHwgICAwMSB8XG4gKiAgICB8IDE0ICAgfCAgIDE0IHwgICAxNCB8XG4gKiAgICB8IDM3NiAgfCAgIDc2IHwgIDM3NiB8XG4gKiAgICB8IDE0NTMgfCAgIDUzIHwgMTQ1MyB8XG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbZ2V0SVNPV2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0SVNPV2Vla1llYXJ9XG4gKiAgICBhbmQgW2dldFdlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldFdlZWtZZWFyfSkuXG4gKlxuICogNi4gU3BlY2lmaWMgbm9uLWxvY2F0aW9uIHRpbWV6b25lcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGluIGBkYXRlLWZuc2AsXG4gKiAgICBzbyByaWdodCBub3cgdGhlc2UgdG9rZW5zIGZhbGwgYmFjayB0byBHTVQgdGltZXpvbmVzLlxuICpcbiAqIDcuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYHRgOiBzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgVGA6IG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogOC4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA5LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIGRheXMgb2YgdGhlIG1vbnRoLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIHRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIgdG9rZW5zIGBZWWAgYW5kIGBZWVlZYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSBkYXkgb2YgeWVhciB0b2tlbnMgYERgIGFuZCBgRERgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRMb25nYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgN1xuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdChkaXJ0eURhdGUsIGRpcnR5Rm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfb3B0aW9ucyRsb2NhbGUsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlMiwgX29wdGlvbnMkbG9jYWxlMiRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIsIF9yZWY1LCBfcmVmNiwgX3JlZjcsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlMywgX29wdGlvbnMkbG9jYWxlMyRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0O1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGZvcm1hdFN0ciA9IFN0cmluZyhkaXJ0eUZvcm1hdFN0cik7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBsb2NhbGUgPSAoX3JlZiA9IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRsb2NhbGUgIT09IHZvaWQgMCA/IF9vcHRpb25zJGxvY2FsZSA6IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IGRlZmF1bHRMb2NhbGU7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYyID0gKF9yZWYzID0gKF9yZWY0ID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiRvcHRpID0gX29wdGlvbnMkbG9jYWxlMi5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTIkb3B0aS5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWY0ICE9PSB2b2lkIDAgPyBfcmVmNCA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWY1ID0gKF9yZWY2ID0gKF9yZWY3ID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyRvcHRpID0gX29wdGlvbnMkbG9jYWxlMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTMkb3B0aS53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY3ICE9PSB2b2lkIDAgPyBfcmVmNyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjYgIT09IHZvaWQgMCA/IF9yZWY2IDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0LndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjUgIT09IHZvaWQgMCA/IF9yZWY1IDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIGlmICghbG9jYWxlLmxvY2FsaXplKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gbG9jYWxpemUgcHJvcGVydHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5mb3JtYXRMb25nKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gZm9ybWF0TG9uZyBwcm9wZXJ0eScpO1xuICB9XG4gIHZhciBvcmlnaW5hbERhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIH1cblxuICAvLyBDb252ZXJ0IHRoZSBkYXRlIGluIHN5c3RlbSB0aW1lem9uZSB0byB0aGUgc2FtZSBkYXRlIGluIFVUQyswMDowMCB0aW1lem9uZS5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBVVEMgZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQsIGxvY2FsZXMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlbS5cbiAgLy8gU2VlIGFuIGlzc3VlIGFib3V0IFVUQyBmdW5jdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG4gIHZhciB0aW1lem9uZU9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlKTtcbiAgdmFyIHV0Y0RhdGUgPSBzdWJNaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlLCB0aW1lem9uZU9mZnNldCk7XG4gIHZhciBmb3JtYXR0ZXJPcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbjogd2Vla1N0YXJ0c09uLFxuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIF9vcmlnaW5hbERhdGU6IG9yaWdpbmFsRGF0ZVxuICB9O1xuICB2YXIgcmVzdWx0ID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICdwJyB8fCBmaXJzdENoYXJhY3RlciA9PT0gJ1AnKSB7XG4gICAgICB2YXIgbG9uZ0Zvcm1hdHRlciA9IGxvbmdGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgIHJldHVybiBcIidcIjtcbiAgICB9XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCInXCIpIHtcbiAgICAgIHJldHVybiBjbGVhbkVzY2FwZWRTdHJpbmcoc3Vic3RyaW5nKTtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdHRlcih1dGNEYXRlLCBzdWJzdHJpbmcsIGxvY2FsZS5sb2NhbGl6ZSwgZm9ybWF0dGVyT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChmaXJzdENoYXJhY3Rlci5tYXRjaCh1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCcgKyBmaXJzdENoYXJhY3RlciArICdgJyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIHZhciBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICByZXR1cm4gbWF0Y2hlZFsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwLCBcIidcIik7XG59IiwgImV4cG9ydCBjb25zdCBwb2ludHNOb3RlTWFqdXJpdHkgPSAxMDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNNYWp1cml0eSA9IDEwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgPSA1MDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgPSAyMDAwO1xyXG5leHBvcnQgY29uc3QgYXZhdGFySW5pdENvbnRlbnQgPSAgYCMgQXZhdGFyXHJcblxyXG58ICAgICAgICB8ICAgICB8XHJcbnwgLS0tLS0tIHwgLS0tIHxcclxufCBMZXZlbCAgfCAwICAgIHxcclxufCBQb2ludHMgfCAwICAgIHxcclxuXmxldmVsQW5kUG9pbnRzXHRcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW0V4cHJpcmllbmNlXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXHJcbiAgICBkYXRhOiBbMTAwMF1cclxueE1pbjogMFxyXG54TWF4OiAxMDAwXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XHJcbnwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0gfFxyXG58ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqMCoqIHxcclxuXmJvb3N0ZXJGYWN0b3JcclxufCAgICAgICAgICAgICB8ICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLSB8IC0tLSB8IC0tLS0tIHxcclxufCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKiowLzIqKiB8XHJcbl5kYWlseU5vdGVzQ2hhbGxlbmdlXHJcbnwgIHwgICAgIHx8XHJcbnwgLS0tLSB8IC0tLSB8IC0tLSB8XHJcbnwgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKjAvNyoqICAgfFxyXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW05vdGVzXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogZGF5cyBkb25lIGluIGEgcm93XHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XHJcbiAgICBkYXRhOiBbN11cclxueE1pbjogMFxyXG54TWF4OiA3XHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwiZGF5c1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58IExldmVsIHwgQ291bnQgfFxyXG58IDotLS06IHwgOi0tLTogfFxyXG58IE1hanVyaXR5IDUgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs1LCAnNScsICc1XHUyN0ExXHVGRTBGJywgJzVcdTJCMDdcdUZFMEYnLCAnNVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDQgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs0LCAnNCcsICc0XHUyN0ExXHVGRTBGJywgJzRcdTJCMDdcdUZFMEYnLCAnNFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDMgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFszLCAnMycsICczXHUyN0ExXHVGRTBGJywgJzNcdTJCMDdcdUZFMEYnLCAnM1x1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDIgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsyLCAnMicsICcyXHUyN0ExXHVGRTBGJywgJzJcdTJCMDdcdUZFMEYnLCAnMlx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDEgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsxLCAnMScsICcxXHUyN0ExXHVGRTBGJywgJzFcdTJCMDdcdUZFMEYnLCAnMVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDAgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFswLCAnMCcsICcwXHUyN0ExXHVGRTBGJywgJzBcdTJCMDdcdUZFMEYnLCAnMFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG5cclxuXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFswLCAwLCAwXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogbW9kaWZpZWRcclxuICAgIGRhdGE6IFswLCAwLCAwXVxyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDgwICVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxueVRpdGxlOiBcIk51bWJlciBvZiBOb3Rlc1wiXHJcbnhUaXRsZTogXCJNb250aHNcIlxyXG54TWluOiAwXHJcblxcYFxcYFxcYFxyXG5eQ2hhcnRNb250aFxyXG5cclxuXHJcbiMjIyBCYWRnZXNcclxuIyMjIyBhY2hpZXZlZFxyXG5cclxuXHJcbiMjIyMgb3V0c3RhbmRpbmdcclxubGV2ZWwgNTogKkVubGlnaHRlbmVkIE5vdmljZSpcclxubGV2ZWwgMTA6ICpDdXJpb3VzIENvbm5vaXNzZXVyKlxyXG5sZXZlbCAyMDogKkJyYWluaWFjIFRyYWlsYmxhemVyKlxyXG5sZXZlbCAyNzogKlNjaG9sYXJseSBUcmFpbGJsYXplcipcclxubGV2ZWwgMzU6ICpJbmZvIE5pbmphIE1hc3RlcipcclxubGV2ZWwgNDI6ICpXaXNlIE93bCBHdXJ1KlxyXG5sZXZlbCA1MDogKkVpbnN0ZWluIEluY2FybmF0ZSpcclxubGV2ZWwgNjA6ICpNYXN0ZXJtaW5kIFNhZ2UqXHJcbmxldmVsIDc1OiAqQ2VyZWJyYWwgTWFlc3RybypcclxubGV2ZWwgODI6ICpaZW4gS25vd2xlZGdlIEtlZXBlcipcclxubGV2ZWwgOTA6ICpHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQqXHJcbmxldmVsIDEwMDogKk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nKlxyXG5cclxuXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNSoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA1IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA0KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDQgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAzXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAzIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDFcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDEgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAwXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAwIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuYDtcclxuIiwgImltcG9ydCB7IFRGaWxlLCBBcHAsIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZVByb2dyZXNzaXZlU3VtbWFyaXphdGlvbihjaGFyQ291bnRUb3RhbDogbnVtYmVyLCBsYXllcjJjb3VudDogbnVtYmVyLCBsYXllcjNjb3VudDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRjb25zdCBwZXJjZW50TGF5ZXIyID0gbGF5ZXIyY291bnQgKiAxMDAgLyBjaGFyQ291bnRUb3RhbDtcclxuICAgIGNvbnN0IHBlcmNlbnRMYXllcjMgPSBsYXllcjNjb3VudCAqIDEwMCAvIGxheWVyMmNvdW50O1xyXG5cdHZhciBsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0dmFyIGxheWVyM21hanVyaXR5ID0gMDtcclxuXHR2YXIgbWFqdXJpdHkgPSAwO1xyXG5cdGlmIChjaGFyQ291bnRUb3RhbCA8IDMwMDApIHtcclxuXHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdC8vY29uc29sZS5sb2coYE5vdGUgaXMgbm90IGxvbmcgZW5vdWdoIHRvIGdldCBpbnRvIGNhbGN1bGF0aW9uIGZvciBtYWp1cml0eS4gVGhlIHRvdGFsIGNoYXJhY3RlciBjb3VudCBpcyAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRpZiAocGVyY2VudExheWVyMiA9PSAwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDMwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjNjb3VudCA9PSAwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjJtYWp1cml0eSA9PSAxICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSAyICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA+PSAzICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmICgobGF5ZXIybWFqdXJpdHkgPT0gMyB8fCBsYXllcjJtYWp1cml0eSA9PSA0KSAmJiAobGF5ZXIzbWFqdXJpdHkgPT0gNCB8fCBsYXllcjNtYWp1cml0eSA9PSA1KSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDUgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gNSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRcclxuXHQvL2NvbnNvbGUubG9nKGBsYXllcjJtYWp1cml0eTogJHtsYXllcjJtYWp1cml0eX0gXFx0bGF5ZXIzbWFqdXJpdHk6ICR7bGF5ZXIzbWFqdXJpdHl9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYHBlcmNlbnRMYXllcjI6ICR7cGVyY2VudExheWVyMn0gXFx0cGVyY2VudExheWVyMzogJHtwZXJjZW50TGF5ZXIzfSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBjaGFyQ291bnRUb3RhbDogJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHRyZXR1cm4gbWFqdXJpdHk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgbGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKTogeyBjaGFyQ291bnQ6IG51bWJlcjsgaGlnaGxpZ2h0ZWRDb3VudDogbnVtYmVyOyBib2xkQ291bnQ6IG51bWJlciB9IHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblxyXG5cdC8vIGNhbGN1bGF0ZSBMYXllciAyICYgMyBMZW5ndGhcclxuXHJcblx0Ly8gQ291bnQgdGhlIGhpZ2hsaWdodGVkIGFuZCBib2xkIGNoYXJhY3RlcnNcclxuXHRsZXQgaGlnaGxpZ2h0ZWRDb3VudCA9IDA7XHJcblx0bGV0IGJvbGRDb3VudCA9IDA7XHJcbiAgXHJcblx0dmFyIGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR2YXIgbGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHQvLyB0byBoYXZlIHRoZSByZWcgZXggY29ycmVjdC4gb3RoZXJ3aXNlIGl0IHdpbGwgZ2V0IHN0dWMgd2l0aCAqKi5cclxuXHRpZihsYXllcjMgPT0gJyoqJyl7XHJcblx0XHRsYXllcjMgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0XHRsYXllcjJleGNsdWRlID0gJz0nXHJcblx0fVxyXG5cdGlmKGxheWVyMiA9PSAnKionKXtcclxuXHRcdGxheWVyMiA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICc9J1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICdcXFxcKidcclxuXHR9XHJcbiAgXHRcclxuXHJcblx0Y29uc3QgaGlnaGxpZ2h0UmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyMn1bXiR7bGF5ZXIyZXhjbHVkZX1dKyR7bGF5ZXIyfWAsIFwiZ1wiKTtcclxuICAgIGNvbnN0IGJvbGRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIzfVteJHtsYXllcjNleGNsdWRlfV0rJHtsYXllcjN9YCwgXCJnXCIpO1xyXG4gIFxyXG5cdC8vIENvdW50IGhpZ2hsaWdodGVkIGNoYXJhY3RlcnNcclxuXHRjb25zdCBoaWdobGlnaHRlZE1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKGhpZ2hsaWdodFJlZ2V4KTtcclxuXHRpZiAoaGlnaGxpZ2h0ZWRNYXRjaGVzKSB7XHJcblx0ICBoaWdobGlnaHRlZENvdW50ID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGhpZ2hsaWdodGVkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnPT0nXHJcblx0ICAvLyBmaXJzdCB0YWtlIHRoZSBsYXllcjIgKGhpZ2hsaWdodGVkQ291bnQpIGFuZCBydW4gb24gdGhpcyB0aGUgJ2JvbGRSZWdleCdcclxuXHQgIC8vIENvdW50IGJvbGQgY2hhcmFjdGVyc1xyXG5cdCAgY29uc3QgbGF5ZXIyU3RyaW5nID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIik7XHJcblx0ICBjb25zdCBib2xkTWF0Y2hlcyA9IGxheWVyMlN0cmluZy5tYXRjaChib2xkUmVnZXgpO1xyXG5cdCAgaWYgKGJvbGRNYXRjaGVzKSB7XHJcblx0ICAgIGJvbGRDb3VudCA9IGJvbGRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGJvbGRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICcqKidcclxuXHQgIH1cclxuXHR9XHJcbiAgXHJcblx0XHJcblx0XHJcbiAgXHJcblx0cmV0dXJuIHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfTtcclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxldmVsT2ZNYXR1cml0eShub3RlTGVuZ3RoOiBudW1iZXIsIGxlbmd0aE9mVGl0bGU6IG51bWJlciwgSW5saW5rczogbnVtYmVyLCBvdXRnb2luZ0xpbmtzOiBudW1iZXIsIHByb2dyZXNzaXZlU3VtTWFqdXJpdHk6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG5vdGVMZW5ndGg6ICR7bm90ZUxlbmd0aH1cXHRsZW5ndGhPZlRpdGxlOiAke2xlbmd0aE9mVGl0bGV9XFx0SW5saW5rczogJHtJbmxpbmtzfVxcdG91dGdvaW5nTGlua3M6ICR7b3V0Z29pbmdMaW5rc31gKVxyXG5cdFxyXG5cdC8vIGRlY2lkZSBpZiBub3RlTGVuZ3RoLW1hanVyaXR5IG9yIHByb2dyZXNzaXZlU3VtLW1hanVyaXR5IHNoYWxsIGJlIHVzZWRcclxuXHR2YXIgbGVuZ3RoTWFqdXJpdHkgPSAwO1xyXG5cdGlmKG5vdGVMZW5ndGggPj0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eSkge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBub3RlTGVuZ3RoO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IHByb2dyZXNzaXZlU3VtTWFqdXJpdHk7XHJcblx0fVxyXG5cdFxyXG5cdGNvbnN0IHRvdGFsV2VpZ2h0IDogbnVtYmVyID0gbGVuZ3RoTWFqdXJpdHkgKyBsZW5ndGhPZlRpdGxlICsgSW5saW5rcyArIG91dGdvaW5nTGlua3M7XHJcblx0Y29uc3QgYXZlcmFnZVdlaWdodCA9IHRvdGFsV2VpZ2h0IC8gNTtcclxuXHQvLyBjb25zb2xlLmxvZyhgdG90YWxXZWlnaHQ6ICR7dG90YWxXZWlnaHR9XFx0YXZlcmFnZVdlaWdodDogJHthdmVyYWdlV2VpZ2h0fWApXHJcblx0aWYgKGF2ZXJhZ2VXZWlnaHQgPCAwLjUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAxKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMikge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzLjUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSA0KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVPdXRsaW5rcyhvdXRsaW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgb3V0bGlua3M6ICR7b3V0bGlua3N9YClcclxuXHRpZiAob3V0bGlua3MgPCAyKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMykge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA5KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMikge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlSW5saW5rcyhudW1JbmxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vdmFyIHByb3plbnRJbmxpbmtzID0gbnVtSW5saW5rcyAqIDEwMCAvIG51bUFsbEZpbGVzO1xyXG5cdC8vY29uc29sZS5sb2coYG51bUlubGlua3M6ICR7bnVtSW5saW5rc31cXHRudW1BbGxGaWxlczogJHtudW1BbGxGaWxlc31cXHRwcm96ZW50SW5saW5rczogJHtwcm96ZW50SW5saW5rc31gKVxyXG5cdC8qaWYgKHByb3plbnRJbmxpbmtzIDwgMC4wMDUgfHwgcHJvemVudElubGlua3MgPiAwLjEpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSAqLyBpZiAobnVtSW5saW5rcyA9PSAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA0KSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA4KSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTYpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA+PSAxNiAmJiBudW1JbmxpbmtzIDwgNTAwICkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlRGlyZWN0aW9uKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCByYXRpbmcgPSBcIlwiXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA+IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwN1x1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDZcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID09IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MjdBMVx1RkUwRlwiXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXCJcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGVuZ3RoRmlsZW5hbWUoZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDMwKSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCA4MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTAwKSB7XHJcblx0cmV0dXJuIDM7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxNTApIHtcclxuXHRyZXR1cm4gNTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE5MCkge1xyXG5cdHJldHVybiA0O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjEwKSB7XHJcblx0cmV0dXJuIDI7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyNTApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2Uge1xyXG5cdHJldHVybiAwO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTm90ZUxlbmd0aChjb250ZW5sZW5ndGg6IG51bWJlcik6IG51bWJlciB7XHJcblx0aWYgKGNvbnRlbmxlbmd0aCA8IDIwMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCA1NTApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTAwMCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMjAwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDIwMDApIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjUwMCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAzMDAwKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWJlck9mT3V0bGlua3MoYWN0aXZlRmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG5cdC8vIGNvbnN0IGFjdGl2ZUZpbGU6IFRGaWxlIHwgbnVsbCA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG5cdGlmICghYWN0aXZlRmlsZSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cdGNvbnN0IGlubGlua3MgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoYWN0aXZlRmlsZSk/LmxpbmtzO1xyXG5cdHJldHVybiBpbmxpbmtzID8gT2JqZWN0LmtleXMoaW5saW5rcykubGVuZ3RoIDogMDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblx0cmV0dXJuIGNoYXJDb3VudDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzX3NpbmdsZShmaWxlX3BhdGg6IHN0cmluZywgdmF1bHRfcGF0aDogc3RyaW5nKTogbnVtYmVyIHtcclxuXHQvLyBHZXQgdGhlIGZpbGVuYW1lIGFuZCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUgd2UncmUgY291bnRpbmcgbGlua3MgdG9cclxuXHRjb25zdCBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZV9wYXRoKTtcclxuXHRjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZmlsZV9wYXRoKTtcclxuXHJcblx0Ly8gQ3JlYXRlIGEgc2V0IHRvIGhvbGQgYWxsIHRoZSBmaWxlcyB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3QgbGlua2luZ19maWxlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcblxyXG5cdC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgZmlsZXMgaW4gdGhlIHZhdWx0IGRpcmVjdG9yeSB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3Qgd2Fsa1N5bmMgPSAoZGlyOiBzdHJpbmcsIGZpbGVsaXN0OiBzdHJpbmdbXSkgPT4ge1xyXG5cdFx0Y29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpO1xyXG5cdFx0ZmlsZWxpc3QgPSBmaWxlbGlzdCB8fCBbXTtcclxuXHRcdGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRpZiAoZnMuc3RhdFN5bmMocGF0aC5qb2luKGRpciwgZmlsZSkpLmlzRGlyZWN0b3J5KCkpIHtcclxuXHRcdFx0XHRmaWxlbGlzdCA9IHdhbGtTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBmaWxlbGlzdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWdub3JlIG5vbi1tZCBmaWxlcyBhbmQgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGlmICghZmlsZS5lbmRzV2l0aChcIi5tZFwiKSB8fCBmaWxlID09PSBmaWxlbmFtZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmVhZCB0aGUgZmlsZSBhbmQgbG9vayBmb3IgbGlua3MgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcclxuXHRcdFx0XHRkYXRhLnNwbGl0KCdcXG4nKS5mb3JFYWNoKChsaW5lOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdGlmIChsaW5lLmluY2x1ZGVzKGBbWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1dYCkgfHwgbGluZS5pbmNsdWRlcyhgWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1gKSkge1xyXG5cdFx0XHRcdFx0XHQvLyBXZSBmb3VuZCBhIGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlIVxyXG5cdFx0XHRcdFx0XHRsaW5raW5nX2ZpbGVzLmFkZChwYXRoLnJlbGF0aXZlKGRpcmVjdG9yeSwgcGF0aC5qb2luKGRpciwgZmlsZSkpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gZmlsZWxpc3Q7XHJcblx0fTtcclxuXHJcblx0d2Fsa1N5bmModmF1bHRfcGF0aCwgW10pO1xyXG5cclxuXHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBhcmUgbWVudGlvbmluZyB0aGUgaW5wdXQgZmlsZVxyXG5cdHJldHVybiBsaW5raW5nX2ZpbGVzLnNpemU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rcyhmaWxlOiBURmlsZSk6IG51bWJlciB7XHJcbiAgICBjb25zdCB7IGFwcDogeyBtZXRhZGF0YUNhY2hlOiB7IHJlc29sdmVkTGlua3MgfSB9IH0gPSB0aGlzO1xyXG4gICAgY29uc3QgeyBwYXRoIH0gPSBmaWxlO1xyXG5cclxuICAgIGNvbnN0IHN1bUlubGlua3MgPSBPYmplY3QudmFsdWVzKHJlc29sdmVkTGlua3MpXHJcbiAgICAgICAgLm1hcCgodmFsOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9KSA9PiB2YWxbcGF0aF0gPz8gMClcclxuICAgICAgICAucmVkdWNlKChsZWZ0LCByaWdodCkgPT4gbGVmdCArIHJpZ2h0LCAwKTtcclxuXHJcbiAgICByZXR1cm4gc3VtSW5saW5rcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlQ291bnRNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+PiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHRcclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdFxyXG5cclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHRcclxuICAgIGNvbnN0IGZpbGVDb3VudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHJcblx0XHRjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG4gICAgICAgIH1cclxuXHRcdFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWxlQ291bnRNYXA7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxURmlsZVtdPiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkU3Vic3RyaW5nczogJHtleGNsdWRlZFN1YnN0cmluZ3N9YClcclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZEZvbGRlcnM6ICR7ZXhjbHVkZWRGb2xkZXJzfWApXHRcclxuICAgIGxldCBmaWxlQXJyYXk6IFRGaWxlW10gPSBbXTtcclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgZmlsZS5wYXRoOiAke2ZpbGUucGF0aH1gKVxyXG5cdFx0aWYgKCghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSB8fCBleGNsdWRlVGFnLmxlbmd0aCA9PT0gMCkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGUgJHtmaWxlfSBnZXQncyBhZGRlZC5gKVxyXG5cdFx0XHRmaWxlQXJyYXkucHVzaChmaWxlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaWxlQXJyYXk7XHJcbn07XHJcbiIsICJpbXBvcnQge1RGaWxlfSBmcm9tICdvYnNpZGlhbic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0Q3JlYXRlZEZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RDcmVhdGVkRmlsZTtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RNb2RpZmllZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RNb2RpZmllZEZpbGUuc3RhdC5tdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdE1vZGlmaWVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdE1vZGlmaWVkRmlsZTtcclxufSAgXHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdERhdGVGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdENyZWF0ZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5jdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vbnRoc0JldHdlZW4oc3RhcnRNb250aDogRGF0ZSwgZW5kTW9udGg6IERhdGUpOiBudW1iZXIge1xyXG5cdGxldCBtb250aHMgPSAoZW5kTW9udGguZ2V0TW9udGgoKSAtIHN0YXJ0TW9udGguZ2V0TW9udGgoKSkgKyAxO1xyXG5cdGlmIChlbmRNb250aC5nZXRGdWxsWWVhcigpID4gc3RhcnRNb250aC5nZXRGdWxsWWVhcigpKSB7XHJcblx0XHRtb250aHMgKz0gKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgLSBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpKjEyO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9udGhzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQuY3RpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQubXRpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhcnRGb3JtYXQoeV9heGlzOiBzdHJpbmcsIGNvdW50c1N0cmluZ01vZDogc3RyaW5nLCBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCBtb25hdHNiZWdyZW56dW5nID0gbnVsbFxyXG5cdGlmIChjaGFydFJlZHV6aWVydW5nTW9uYXRlID09IDApe1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IDBcclxuXHR9IGVsc2Uge1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IGNvdW50c1N0cmluZ01vZC5zcGxpdCgnLCcpLmxlbmd0aCAtIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHR9XHJcblx0XHJcblx0Ly9jb25zdCBtb25hdHNiZWdyZW56dW5nID0gbGVuZ3RoY291bnRzU3RyaW5nQ3JlYXRlIC0gdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlXHJcblx0cmV0dXJuIFwiYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtcIiArIHlfYXhpcyArIFwiXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IG1vZGlmaWVkXFxuICAgIGRhdGE6IFtcIiArIGNvdW50c1N0cmluZ01vZCArIFwiXVxcbnRlbnNpb246IDAuMlxcbndpZHRoOiA4MCAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG55VGl0bGU6IFxcXCJOdW1iZXIgb2YgTm90ZXNcXFwiXFxueFRpdGxlOiBcXFwiTW9udGhzXFxcIlxcbnhNaW46IFwiICsgbW9uYXRzYmVncmVuenVuZyArIFwiXFxuYGBgXCI7XHJcbn1cclxuXHJcbiAgXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQ2hhcnRDb250ZW50IChhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBuZXdDb250ZW50OiBzdHJpbmcpIHtcclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRpZiAobGluZSA9PT0gXCJeQ2hhcnRNb250aFwiKSB7XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmIChyZWZlcmVuY2UgIT0gbnVsbCl7XHJcblx0XHRlbmQgPSByZWZlcmVuY2U7XHJcblx0XHRzdGFydCA9IHJlZmVyZW5jZSAtIDE5O1xyXG5cdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdDb250ZW50LCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIGxldmVsOiBzdHJpbmc7XHJcbiAgfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSWZSZWNlaXZlQUJhZGdlKGxldmVsT2xkOiBudW1iZXIsIGxldmVsTmV3OiBudW1iZXIpOiBib29sZWFuIHtcclxuICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgbGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcbiAgZm9yIChsZXQgaT0wOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspe1xyXG4gICAgaWYgKGxldmVsT2xkIDwgYmFkZ2VMZXZlbHNbaV0gJiYgbGV2ZWxOZXcgPj0gYmFkZ2VMZXZlbHNbaV0pe1xyXG4gICAgICByZWNlaXZlQmFkZ2UgPSB0cnVlXHJcbiAgICB9IFxyXG4gIH1cclxuICByZXR1cm4gcmVjZWl2ZUJhZGdlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIsIGluZm9ybTogYm9vbGVhbik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiLCBsZXZlbDogXCJsZXZlbCA1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgLCBsZXZlbDogXCJsZXZlbCAyMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZSBPd2wgR3VydVwiLCBkZXNjcmlwdGlvbjogXCJXaG9vLWhvbyEgWW91J3ZlIGFjaGlldmVkICdXaXNlIE93bCBHdXJ1JyBzdGF0dXMuIFlvdXIgd2lzZG9tIGlzIGxlZ2VuZGFyeSwgYW5kIHlvdXIgaG9vdHMgb2Yga25vd2xlZGdlIGVjaG8gdGhyb3VnaCB0aGUgZm9yZXN0IG9mIGlnbm9yYW5jZSFcIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVpbnN0ZWluIEluY2FybmF0ZVwiLCBkZXNjcmlwdGlvbjogXCJFdXJla2EhIFlvdSd2ZSBiZWNvbWUgYW4gJ0VpbnN0ZWluIEluY2FybmF0ZSwnIHB1c2hpbmcgdGhlIGJvdW5kYXJpZXMgb2YgdW5kZXJzdGFuZGluZyBhbmQgYmVuZGluZyB0aGUgZmFicmljIG9mIGtub3dsZWRnZSB0byB5b3VyIHdpbGwhXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJNYXN0ZXJtaW5kIFNhZ2VcIiwgZGVzY3JpcHRpb246IFwiTWFnbmlmaWNlbnQhIFlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgcmFuayBvZiAnTWFzdGVybWluZCBTYWdlLCcgZ3VpZGluZyB0aGUgcml2ZXJzIG9mIGluZm9ybWF0aW9uIGFuZCBlbmxpZ2h0ZW5pbmcgYWxsIHdobyBzZWVrIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNlcmVicmFsIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQnJhdmlzc2ltbyEgWW91J3JlIG5vdyBhICdDZXJlYnJhbCBNYWVzdHJvLCcgY29uZHVjdGluZyB0aGUgc3ltcGhvbnkgb2Yga25vd2xlZGdlIHdpdGggdGhlIGZpbmVzc2Ugb2YgYSB2aXJ0dW9zbyBjb25kdWN0b3IhXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJaZW4gS25vd2xlZGdlIEtlZXBlclwiLCBkZXNjcmlwdGlvbjogXCJTZXJlbml0eSBhY2hpZXZlZCEgQXMgYSAnWmVuIEtub3dsZWRnZSBLZWVwZXIsJyB5b3UgbWFpbnRhaW4gYSB0cmFucXVpbCBtaW5kIHdoaWxlIG1hbmFnaW5nIHZhc3QgcG9vbHMgb2Yga25vd2xlZGdlIHdpdGggZ3JhY2UgYW5kIHBvaXNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkXCIsIGRlc2NyaXB0aW9uOiBcIkFsbCBoYWlsIHRoZSAnR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkIScgWW91IHdpZWxkIHRoZSBrbm93bGVkZ2Ugb2YgYWdlcyBhbmQgaG9sZCB0aGUga2V5cyB0byB1bmxvY2sgdGhlIGdhdGVzIG9mIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nXCIsIGRlc2NyaXB0aW9uOiBcIkNvbmdyYXR1bGF0aW9ucywgb2ggd2lzZSBvbmUhIFlvdSd2ZSBhdHRhaW5lZCB0aGUgaGlnaGVzdCBsZXZlbCBvZiBlbmxpZ2h0ZW5tZW50IGFzIHRoZSAnT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcuJyBZb3VyIHVuZGVyc3RhbmRpbmcga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciB3aXNkb20gaXMgYXMgdmFzdCBhcyB0aGUgY29zbW9zIGl0c2VsZiFcIiwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc1tpbmRleF1cclxuICB9XHJcbiAgXHJcblxyXG5cclxuICBleHBvcnQgIGZ1bmN0aW9uIGdldEJhZGdlRm9ySW5pdExldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbMCwgMywgNywgMTUsIDIzLCAzMCwgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzSW5pdDogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgU2Vla2VyIEluaXRpYXRlXCIsIGRlc2NyaXB0aW9uOiBcIldlbGNvbWUgdG8gdGhlIGpvdXJuZXkgb2Yga25vd2xlZGdlISBBcyBhICdMb3JlIFNlZWtlciBJbml0aWF0ZSwnIHlvdSd2ZSB0YWtlbiB5b3VyIGZpcnN0IHN0ZXBzIGludG8gdGhlIHdvcmxkIG9mIG9yZ2FuaXplZCB3aXNkb20uIFlvdXIgcXVlc3QgaGFzIGp1c3QgYmVndW4sIGFuZCB3aXRoIGVhY2ggbm90ZSB5b3UgbWFrZSwgeW91IGxheSB0aGUgZm91bmRhdGlvbiBmb3IgYSBmdXR1cmUgcmljaCB3aXRoIGluc2lnaHRzIGFuZCB1bmRlcnN0YW5kaW5nLiBZb3VyIGpvdXJuZXkgc3RhcnRzIGhlcmUsIGFuZCB0aGUgcGF0aCBhaGVhZCBpcyBmaWxsZWQgd2l0aCBwb3RlbnRpYWwgYW5kIGRpc2NvdmVyeS5cIiwgbGV2ZWw6IFwibGV2ZWwgMVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEFwcHJlbnRpY2VcIiwgZGVzY3JpcHRpb246IFwiWW91J3ZlIGhpdCB0aGUgZ3JvdW5kIHJ1bm5pbmcgd2l0aCB5b3VyIGV4aXN0aW5nIGtub3dsZWRnZSB0cmVhc3VyZXMhIFlvdSdyZSBhbHJlYWR5IGFuICdMb3JlIEFwcHJlbnRpY2UsJyBhcm1lZCB3aXRoIGEgd2VhbHRoIG9mIHdpc2RvbSBhbmQgcmVhZHkgdG8gc2hhcGUgaXQgZnVydGhlci5cIiwgbGV2ZWw6IFwibGV2ZWwgM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYXZ2eSBTY2hvbGFyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBnaXZlbiB5b3UgYSBoZWFkIHN0YXJ0ISBZb3UncmUgbm93IGEgJ1NhdnZ5IFNjaG9sYXIsJyBjb25maWRlbnRseSBkaXZpbmcgaW50byB0aGUgc2VhIG9mIGluZm9ybWF0aW9uIHdpdGggYSB0cmVhc3VyZSB0cm92ZSBvZiBpbnNpZ2h0cy5cIiAsIGxldmVsOiBcImxldmVsIDdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2FnZSdzIEZvdW5kYXRpb25cIiwgZGVzY3JpcHRpb246IFwiQnVpbGRpbmcgdXBvbiB5b3VyIHByZS1leGlzdGluZyBub3RlcywgeW91J3JlIGVzdGFibGlzaGluZyB0aGUgJ1NhZ2UncyBGb3VuZGF0aW9uJyBmb3IgYW4gZXZlbiBncmFuZGVyIGVkaWZpY2Ugb2Yga25vd2xlZGdlLiBZb3VyIGdyb3VuZHdvcmsgaXMgaW1wcmVzc2l2ZSFcIiAsIGxldmVsOiBcImxldmVsIDE1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2RvbSBTZWVkbGluZ1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbnVydHVyZWQgdGhlIGdyb3d0aCBvZiBhICdXaXNkb20gU2VlZGxpbmcuJyBZb3UncmUgY3VsdGl2YXRpbmcgeW91ciBnYXJkZW4gb2Yga25vd2xlZGdlIHdpdGggY2FyZSBhbmQgcGF0aWVuY2UuXCIgLCBsZXZlbDogXCJsZXZlbCAyM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJQcm9kaWdpb3VzIFByZXBhcmVyXCIsIGRlc2NyaXB0aW9uOiBcIlRoYW5rcyB0byB5b3VyIHByaW9yIGVmZm9ydHMsIHlvdSdyZSBhICdQcm9kaWdpb3VzIFByZXBhcmVyLCcgc3RhbmRpbmcgdGFsbCBhbW9uZyB5b3VyIG5vdGVzIGFuZCByZWFkeSB0byBjb25xdWVyIG5ldyByZWFsbXMgb2YgdW5kZXJzdGFuZGluZy5cIiAsIGxldmVsOiBcImxldmVsIDMwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVwaWMgRXBpcGhhbnkgRXhwbG9yZXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBwYXN0IG5vdGVzIGhhdmUgbGVkIHlvdSB0byB0aGUgZ3JhbmQgJ0VwaWMgRXBpcGhhbnkgRXhwbG9yZXInIHN0YXR1cyEgWW91J3ZlIGFscmVhZHkgYmVlbiBkb3duIGEgZmV3IHJhYmJpdCBob2xlcyBhbmQgY29tZSBvdXQgd2l0aCBkYXp6bGluZyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgTHVtaW5hcnlcIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIGlsbHVtaW5hdGluZyB5b3VyIHBhdGgsIHlvdSd2ZSBiZWNvbWUgYSAnTG9yZSBMdW1pbmFyeSwnIHNoaW5pbmcgbGlnaHQgb24gdGhlIG15c3RlcmllcyBvZiB0aGUgdW5pdmVyc2UsIG9uZSBpZGVhIGF0IGEgdGltZS5cIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjcmliZSBvZiB0aGUgQW5jaWVudHNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBtYXN0ZXJ5IG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYW5hZ2VtZW50IGhhcyBlbGV2YXRlZCB5b3UgdG8gdGhlIGVzdGVlbWVkIHJhbmsgb2YgdGhlICdTY3JpYmUgb2YgdGhlIEFuY2llbnRzLicgWW91ciBleGlzdGluZyBub3RlcyBoYXZlIHRyYW5zZm9ybWVkIGludG8gdHJlYXN1cmVzLCBicmlkZ2luZyB0aGUgZ2FwIGJldHdlZW4gb2xkIHdpc2RvbSBhbmQgbmV3IGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXVyZWthIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQXJtZWQgd2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzLCB5b3UncmUgdGhlICdFdXJla2EgTWFlc3RybywnIGNvbXBvc2luZyBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHdpdGggdGhlIG1lbG9keSBvZiBkaXNjb3ZlcnkuXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDaHJvbmljbGVzIENoYW1waW9uXCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBzdGFuZGluZyBhcyBhIHRlc3RhbWVudCwgeW91J3ZlIGFzY2VuZGVkIHRvIHRoZSBpbGx1c3RyaW91cyAnQ2hyb25pY2xlcyBDaGFtcGlvbicgbGV2ZWwuIFlvdXIgam91cm5leSB0aHJvdWdoIHRpbWUncyB0YXBlc3RyeSBoYXMgYnJvdWdodCBmb3J0aCBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHBhc3QgYW5kIHByZXNlbnQuXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXJcIiwgZGVzY3JpcHRpb246IFwiQXMgJ1RoZSBDdXJpb3VzIENhcnRvZ3JhcGhlciwnIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYXBwZWQgb3V0IHVuY2hhcnRlZCB0ZXJyaXRvcmllcyBvZiB1bmRlcnN0YW5kaW5nLiBZb3VyIGN1cmlvc2l0eSBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIG5vdGVzIGFyZSB0aGUgY29tcGFzcyBndWlkaW5nIHlvdXIgZXhwbG9yYXRpb24uXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTdWx0YW4gb2YgU3ludGhlc2lzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYWRlIHlvdSB0aGUgJ1N1bHRhbiBvZiBTeW50aGVzaXMuJyBZb3UncmUgdGhlIG1hc3RlciB3ZWF2ZXIsIHRocmVhZGluZyB0b2dldGhlciB0aHJlYWRzIG9mIGluZm9ybWF0aW9uIGludG8gYSByaWNoIHRhcGVzdHJ5IG9mIGluc2lnaHQuXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdGVybmFsIEFyY2hpdmlzdFwiLCBkZXNjcmlwdGlvbjogXCJBdCB0aGUgcGlubmFjbGUgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hc3RlcnksIHlvdSdyZSBub3cgcmV2ZXJlZCBhcyB0aGUgJ0V0ZXJuYWwgQXJjaGl2aXN0LicgWW91ciBleGlzdGluZyBub3RlcywgY2FyZWZ1bGx5IGN1cmF0ZWQgYW5kIG51cnR1cmVkLCBzdGFuZCBhcyBpbW1vcnRhbCBiZWFjb25zLCBndWlkaW5nIHNlZWtlcnMgdGhyb3VnaCB0aGUgbGFieXJpbnRoIG9mIGtub3dsZWRnZSBhY3Jvc3MgYWdlcy5cIiAsIGxldmVsOiBcImxldmVsIDEwMFwiIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc0luaXRbaW5kZXhdXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRXhhbXBsZSB1c2FnZTpcclxuICAvLyBjb25zdCBjdXJyZW50TGV2ZWwgPSA0MjsgLy8gUmVwbGFjZSB0aGlzIHdpdGggdGhlIGFjdHVhbCBwbGF5ZXIncyBsZXZlbFxyXG4gIC8vIGNvbnN0IGJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChjdXJyZW50TGV2ZWwpO1xyXG4gIC8vIGNvbnNvbGUubG9nKGBDb25ncmF0dWxhdGlvbnMhIFlvdSd2ZSByZWFjaGVkIExldmVsICR7Y3VycmVudExldmVsfS4gWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YCk7XHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4gICAgLypcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiIH0sXHJcbiAgICAgIC8vIEFkZCBtb3JlIGJhZGdlcyBoZXJlIGZvciBsZXZlbHMgNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIGFuZCAxMDBcclxuICAgICAgLy8gRXhhbXBsZTpcclxuICAgICAgLy8geyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgfSxcclxuICAgICAgLy8geyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiB9LFxyXG4gICAgICAvLyAuLi5hbmQgc28gb25cclxuICAgIF07XHJcbiAgXHJcbiAgICBjb25zdCBtYXhMZXZlbCA9MTAwOyAvLyBBc3N1bWluZyBlYWNoIGJhZGdlIGlzIGF3YXJkZWQgZXZlcnkgNSBsZXZlbHNcclxuICAgIGNvbnN0IGNhcHBlZExldmVsID0gTWF0aC5taW4obGV2ZWwsIG1heExldmVsKTtcclxuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihjYXBwZWRMZXZlbCAvIDUpIC0gMTtcclxuICAgIHJldHVybiBiYWRnZXNbaW5kZXhdO1xyXG4gIH1cclxuICBcclxuXHJcbiAgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgfVxyXG4gICovXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIExldmVsRGF0YSB7XHJcbiAgICBwb2ludHM6IG51bWJlcjtcclxuICAgIGxldmVsOiBudW1iZXI7XHJcbiAgICBwb2ludHNOZXh0OiBudW1iZXI7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbnN0IGxldmVsRGF0YTogTGV2ZWxEYXRhW10gPSBbXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDAsIHBvaW50c05leHQ6IDB9LFxyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAxLCBwb2ludHNOZXh0OiAxMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMCwgbGV2ZWw6IDIsIHBvaW50c05leHQ6IDMwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwLCBsZXZlbDogMywgcG9pbnRzTmV4dDogNzUwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAsIGxldmVsOiA0LCBwb2ludHNOZXh0OiAxNTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MDAwLCBsZXZlbDogNSwgcG9pbnRzTmV4dDogMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMCwgbGV2ZWw6IDYsIHBvaW50c05leHQ6IDUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTAwMDAsIGxldmVsOiA3LCBwb2ludHNOZXh0OiA4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgwMDAwLCBsZXZlbDogOCwgcG9pbnRzTmV4dDogMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIwMDAwLCBsZXZlbDogOSwgcG9pbnRzTmV4dDogMTcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTcwMDAwLCBsZXZlbDogMTAsIHBvaW50c05leHQ6IDIzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMDAwMCwgbGV2ZWw6IDExLCBwb2ludHNOZXh0OiAzMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAsIGxldmVsOiAxMiwgcG9pbnRzTmV4dDogMzgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzgwMDAwLCBsZXZlbDogMTMsIHBvaW50c05leHQ6IDQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3MDAwMCwgbGV2ZWw6IDE0LCBwb2ludHNOZXh0OiA2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDAwMDAsIGxldmVsOiAxNSwgcG9pbnRzTmV4dDogNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMDAwLCBsZXZlbDogMTYsIHBvaW50c05leHQ6IDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMDAwMCwgbGV2ZWw6IDE3LCBwb2ludHNOZXh0OiAxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTExMDAwMCwgbGV2ZWw6IDE4LCBwb2ludHNOZXh0OiAxMzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMyMDAwMCwgbGV2ZWw6IDE5LCBwb2ludHNOZXh0OiAxNTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTU1MDAwMCwgbGV2ZWw6IDIwLCBwb2ludHNOZXh0OiAxODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTgwMDAwMCwgbGV2ZWw6IDIxLCBwb2ludHNOZXh0OiAyMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjA3MDAwMCwgbGV2ZWw6IDIyLCBwb2ludHNOZXh0OiAyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjM2MDAwMCwgbGV2ZWw6IDIzLCBwb2ludHNOZXh0OiAyNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjY3MDAwMCwgbGV2ZWw6IDI0LCBwb2ludHNOZXh0OiAzMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwMCwgbGV2ZWw6IDI1LCBwb2ludHNOZXh0OiAzMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM1MDAwMCwgbGV2ZWw6IDI2LCBwb2ludHNOZXh0OiAzNzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzcyMDAwMCwgbGV2ZWw6IDI3LCBwb2ludHNOZXh0OiA0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDExMDAwMCwgbGV2ZWw6IDI4LCBwb2ludHNOZXh0OiA0NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUyMDAwMCwgbGV2ZWw6IDI5LCBwb2ludHNOZXh0OiA0OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDk1MDAwMCwgbGV2ZWw6IDMwLCBwb2ludHNOZXh0OiA1NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQwMDAwMCwgbGV2ZWw6IDMxLCBwb2ludHNOZXh0OiA1ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTg3MDAwMCwgbGV2ZWw6IDMyLCBwb2ludHNOZXh0OiA2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjM2MDAwMCwgbGV2ZWw6IDMzLCBwb2ludHNOZXh0OiA2ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjg3MDAwMCwgbGV2ZWw6IDM0LCBwb2ludHNOZXh0OiA3NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwMDAwMCwgbGV2ZWw6IDM1LCBwb2ludHNOZXh0OiA3OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzk1MDAwMCwgbGV2ZWw6IDM2LCBwb2ludHNOZXh0OiA4NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODUyMDAwMCwgbGV2ZWw6IDM3LCBwb2ludHNOZXh0OiA5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTExMDAwMCwgbGV2ZWw6IDM4LCBwb2ludHNOZXh0OiA5NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTcyMDAwMCwgbGV2ZWw6IDM5LCBwb2ludHNOZXh0OiAxMDM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMzUwMDAwLCBsZXZlbDogNDAsIHBvaW50c05leHQ6IDExMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTEwMDAwMDAsIGxldmVsOiA0MSwgcG9pbnRzTmV4dDogMTE2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTY3MDAwMCwgbGV2ZWw6IDQyLCBwb2ludHNOZXh0OiAxMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMzYwMDAwLCBsZXZlbDogNDMsIHBvaW50c05leHQ6IDEzMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMwNzAwMDAsIGxldmVsOiA0NCwgcG9pbnRzTmV4dDogMTM4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzgwMDAwMCwgbGV2ZWw6IDQ1LCBwb2ludHNOZXh0OiAxNDU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE0NTUwMDAwLCBsZXZlbDogNDYsIHBvaW50c05leHQ6IDE1MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUzMjAwMDAsIGxldmVsOiA0NywgcG9pbnRzTmV4dDogMTYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjExMDAwMCwgbGV2ZWw6IDQ4LCBwb2ludHNOZXh0OiAxNjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2OTIwMDAwLCBsZXZlbDogNDksIHBvaW50c05leHQ6IDE3NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTc3NTAwMDAsIGxldmVsOiA1MCwgcG9pbnRzTmV4dDogMTg2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODYwMDAwMCwgbGV2ZWw6IDUxLCBwb2ludHNOZXh0OiAxOTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE5NDcwMDAwLCBsZXZlbDogNTIsIHBvaW50c05leHQ6IDIwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjAzNjAwMDAsIGxldmVsOiA1MywgcG9pbnRzTmV4dDogMjEyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMTI3MDAwMCwgbGV2ZWw6IDU0LCBwb2ludHNOZXh0OiAyMjIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIyMjAwMDAwLCBsZXZlbDogNTUsIHBvaW50c05leHQ6IDIzMTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMxNTAwMDAsIGxldmVsOiA1NiwgcG9pbnRzTmV4dDogMjQxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNDEyMDAwMCwgbGV2ZWw6IDU3LCBwb2ludHNOZXh0OiAyNTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI1MTEwMDAwLCBsZXZlbDogNTgsIHBvaW50c05leHQ6IDI2MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjYxMjAwMDAsIGxldmVsOiA1OSwgcG9pbnRzTmV4dDogMjcxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNzE1MDAwMCwgbGV2ZWw6IDYwLCBwb2ludHNOZXh0OiAyODIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI4MjAwMDAwLCBsZXZlbDogNjEsIHBvaW50c05leHQ6IDI5MjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjkyNzAwMDAsIGxldmVsOiA2MiwgcG9pbnRzTmV4dDogMzAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDM2MDAwMCwgbGV2ZWw6IDYzLCBwb2ludHNOZXh0OiAzMTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMxNDcwMDAwLCBsZXZlbDogNjQsIHBvaW50c05leHQ6IDMyNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzI2MDAwMDAsIGxldmVsOiA2NSwgcG9pbnRzTmV4dDogMzM3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzc1MDAwMCwgbGV2ZWw6IDY2LCBwb2ludHNOZXh0OiAzNDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM0OTIwMDAwLCBsZXZlbDogNjcsIHBvaW50c05leHQ6IDM2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzYxMTAwMDAsIGxldmVsOiA2OCwgcG9pbnRzTmV4dDogMzczMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzMyMDAwMCwgbGV2ZWw6IDY5LCBwb2ludHNOZXh0OiAzODU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4NTUwMDAwLCBsZXZlbDogNzAsIHBvaW50c05leHQ6IDM5ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzk4MDAwMDAsIGxldmVsOiA3MSwgcG9pbnRzTmV4dDogNDEwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTA3MDAwMCwgbGV2ZWw6IDcyLCBwb2ludHNOZXh0OiA0MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQyMzYwMDAwLCBsZXZlbDogNzMsIHBvaW50c05leHQ6IDQzNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDM2NzAwMDAsIGxldmVsOiA3NCwgcG9pbnRzTmV4dDogNDUwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTAwMDAwMCwgbGV2ZWw6IDc1LCBwb2ludHNOZXh0OiA0NjM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ2MzUwMDAwLCBsZXZlbDogNzYsIHBvaW50c05leHQ6IDQ3NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDc3MjAwMDAsIGxldmVsOiA3NywgcG9pbnRzTmV4dDogNDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTExMDAwMCwgbGV2ZWw6IDc4LCBwb2ludHNOZXh0OiA1MDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwNTIwMDAwLCBsZXZlbDogNzksIHBvaW50c05leHQ6IDUxOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTE5NTAwMDAsIGxldmVsOiA4MCwgcG9pbnRzTmV4dDogNTM0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MzQwMDAwMCwgbGV2ZWw6IDgxLCBwb2ludHNOZXh0OiA1NDg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0ODcwMDAwLCBsZXZlbDogODIsIHBvaW50c05leHQ6IDU2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTYzNjAwMDAsIGxldmVsOiA4MywgcG9pbnRzTmV4dDogNTc4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1Nzg3MDAwMCwgbGV2ZWw6IDg0LCBwb2ludHNOZXh0OiA1OTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU5NDAwMDAwLCBsZXZlbDogODUsIHBvaW50c05leHQ6IDYwOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjA5NTAwMDAsIGxldmVsOiA4NiwgcG9pbnRzTmV4dDogNjI1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MjUyMDAwMCwgbGV2ZWw6IDg3LCBwb2ludHNOZXh0OiA2NDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY0MTEwMDAwLCBsZXZlbDogODgsIHBvaW50c05leHQ6IDY1NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjU3MjAwMDAsIGxldmVsOiA4OSwgcG9pbnRzTmV4dDogNjczNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NzM1MDAwMCwgbGV2ZWw6IDkwLCBwb2ludHNOZXh0OiA2OTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY5MDAwMDAwLCBsZXZlbDogOTEsIHBvaW50c05leHQ6IDcwNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzA2NzAwMDAsIGxldmVsOiA5MiwgcG9pbnRzTmV4dDogNzIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MjM2MDAwMCwgbGV2ZWw6IDkzLCBwb2ludHNOZXh0OiA3NDA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDcwMDAwLCBsZXZlbDogOTQsIHBvaW50c05leHQ6IDc1ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzU4MDAwMDAsIGxldmVsOiA5NSwgcG9pbnRzTmV4dDogNzc1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NzU1MDAwMCwgbGV2ZWw6IDk2LCBwb2ludHNOZXh0OiA3OTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5MzIwMDAwLCBsZXZlbDogOTcsIHBvaW50c05leHQ6IDgxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODExMTAwMDAsIGxldmVsOiA5OCwgcG9pbnRzTmV4dDogODI5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MjkyMDAwMCwgbGV2ZWw6IDk5LCBwb2ludHNOZXh0OiA4NDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg0NzUwMDAwLCBsZXZlbDogMTAwLCBwb2ludHNOZXh0OiA4NjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg2NjAwMDAwLCBsZXZlbDogMTAxLCBwb2ludHNOZXh0OiA4ODQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg4NDcwMDAwLCBsZXZlbDogMTAyLCBwb2ludHNOZXh0OiA5MDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkwMzYwMDAwLCBsZXZlbDogMTAzLCBwb2ludHNOZXh0OiA5MjI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMjcwMDAwLCBsZXZlbDogMTA0LCBwb2ludHNOZXh0OiA5NDIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk0MjAwMDAwLCBsZXZlbDogMTA1LCBwb2ludHNOZXh0OiA5NjE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk2MTUwMDAwLCBsZXZlbDogMTA2LCBwb2ludHNOZXh0OiA5ODEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk4MTIwMDAwLCBsZXZlbDogMTA3LCBwb2ludHNOZXh0OiAxMDAxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAxMTAwMDAsIGxldmVsOiAxMDgsIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMjEyMDAwMCwgbGV2ZWw6IDEwOSwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTA0MTUwMDAwLCBsZXZlbDogMTEwLCBwb2ludHNOZXh0OiAxMDYxNTAwMDAgfSxcclxuICBdO1xyXG4gIFxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRMZXZlbEZvclBvaW50cyhwb2ludHM6IG51bWJlcik6IExldmVsRGF0YSB7XHJcbiAgICBsZXQgbGV2ZWwgOkxldmVsRGF0YSA9IGxldmVsRGF0YVswXTtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHBvaW50cyA+PSBkYXRhLnBvaW50cykge1xyXG4gICAgICAgIGxldmVsID0gZGF0YTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxldmVsO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c1BvaW50c0ZvckxldmVsKHRhcmdldExldmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHN0YXR1c1BvaW50cyA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmICh0YXJnZXRMZXZlbCA9PSBkYXRhLmxldmVsICYmIHN0YXR1c1BvaW50cyA9PSAwKSB7XHJcbiAgICAgICAgc3RhdHVzUG9pbnRzID0gZGF0YS5wb2ludHM7XHJcbiAgICAgIH0gXHJcbiAgICB9XHJcblxyXG5cdFx0XHJcblx0XHRyZXR1cm4gc3RhdHVzUG9pbnRzXHJcbiAgfVxyXG4gIFxyXG5cclxuLypcclxuY29uc3QgcG9pbnRzID0gNTUwMDtcclxuY29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhwb2ludHMpO1xyXG5jb25zb2xlLmxvZyhgV2l0aCAke3BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsfS5gKTtcclxuKi8iLCAiY29uc3QgbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2U6IHN0cmluZ1tdID0gW1xyXG5cdFwiU2V2ZW4gZGF5cyBvZiBub3RlLXRha2luZz8gWW91J3JlIHByYWN0aWNhbGx5IGEgbm90ZSBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBmaWVzdGEhIFx1RDgzQ1x1REY4OVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBwYXJ0eSBnb2luZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0gWW91J3JlIGxpa2UgdGhlIEphbWVzIEJvbmQgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REQ3Nlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzZWNyZXQgYWdlbnQhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhICdOb3RlLUEtRGF5JyBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXBlcyBvcHRpb25hbCFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3ZlIHByYWN0aWNhbGx5IHdyaXR0ZW4gYSBtaW5pIG5vdmVsIGJ5IG5vdyEgXHVEODNEXHVEQ0RBXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGF1dGhvciBzdGF0dXMgYWNoaWV2ZWQhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFVzYWluIEJvbHQgb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzcHJpbnRpbmcgdG93YXJkcyBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc3ByZWUhIEl0J3MgbGlrZSBhIG5vdGVzLXBsb3Npb24hIFx1RDgzRFx1RENBNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBmaXJld29ya3MgY29taW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYmFzaWNhbGx5IHRoZSBNaWNoYWVsIEpvcmRhbiBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNsYW0gZHVuayFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNVlAhIFx1RDgzQ1x1REZDNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNjb3JpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgJ1NldmVuIERheSBOb3RlIEZldmVyJyBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhdGNoIHRoZSBmZXZlciFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGphbW1pbichXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgbWFnaWMgc2hvdyEgTm93IHlvdSBzZWUgdGhlIG5vdGVzLCBub3cgeW91IGRvbid0ISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cywga2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBsaWtlIGEgbm90ZS10YWtpbmcgSmVkaSBNYXN0ZXIhIFx1RDgzQ1x1REYwQ1x1MjY5NFx1RkUwRiBbWF0gcG9pbnRzLCBtYXkgdGhlIG5vdGVzIGJlIHdpdGggeW91IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNYWNHeXZlciwgdHVybmluZyBpbmZvcm1hdGlvbiBpbnRvIHNvbHV0aW9ucyEgXHVEODNEXHVERDI3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY3JhZnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBjaGVmLCBjb29raW5nIHVwIGEga25vd2xlZGdlIGZlYXN0ISBcdUQ4M0NcdURGNzNcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjb29raW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQwXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTGV3aXMgYW5kIENsYXJrLCBjaGFydGluZyBuZXcgdGVycml0b3JpZXMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURERkFcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGRldGVjdGl2ZSwgc29sdmluZyBjYXNlcyBvZiBjdXJpb3NpdHkhIFx1RDgzRFx1REQ3NVx1RkUwRlx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGRldGVjdGluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHBpb25lZXIsIGJsYXppbmcgdHJhaWxzIHRocm91Z2ggdGhlIGZvcmVzdHMgb2YgaW5mb3JtYXRpb24hIFx1RDgzQ1x1REYzMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBpb25lZXJpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCJcclxuXTtcclxuXHJcbmNvbnN0IHR3b05vdGVNZXNzYWdlczogc3RyaW5nW10gPSBbXHJcblx0XCJCb29tISBZb3UganVzdCBhY2VkIHRoZSAyLW5vdGUgdGFuZ28hIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgZ3Jvb3ZpbichXCIsXHJcblx0XCJUd28gbm90ZXMgaW4gYSBkYXk/IFlvdSdyZSBvZmZpY2lhbGx5IGEgTm90ZSBOaW5qYSEgXHVEODNFXHVERDRCIFtYXSBwb2ludHMgZWFybmVkLiBSb2NrIG9uIVwiLFxyXG5cdFwiSGlnaC1maXZlISBZb3UndmUgY29ucXVlcmVkIHRoZSAyLW5vdGUgcm9kZW8hIFx1RDgzRVx1REQyMCBbWF0gcG9pbnRzIGVhcm5lZC4gWWVlaGF3IVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUhIFR3byBub3RlcyBpbiBvbmUgZGF5LCB5b3UgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgVHdvIG5vdGVzIGluIGEgZGF5IC0gd2hhdCdzIHlvdXIgc2VjcmV0IHdlYXBvbj8gXHVEODNEXHVERDI1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJLYWJvb20hIFlvdSBqdXN0IGJsZXcgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSB3YXRlciEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhIDItbm90ZSBzdXBlcnN0YXIhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGluIHRoZSBiYWcuIEtlZXAgc2hpbmluZyFcIixcclxuXHRcIkRvdWJsZSB1cCwgZG91YmxlIGRvd24hIFR3byBub3RlcyBpbiBvbmUgZGF5IC0geW91J3JlIGEgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgcGFydHkhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiS2EtY2hpbmchIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIHJhY2tpbmcgdXAgdGhvc2UgcG9pbnRzISBcdUQ4M0RcdURDQjAgW1hdIGVhcm5lZCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWdpY2lhbiEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHRyaWNrP1wiLFxyXG5cdFwiVHdvIG5vdGVzPyBOYWlsZWQgaXQhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCBnb2luZyFcIixcclxuXHRcIkFicmEtY2FkYWJyYSEgVHdvIG5vdGVzIGFwcGVhciEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlLCBkb3VibGUgdGhlIGZ1biEgVHdvIG5vdGVzIGluIG9uZSBkYXkhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgZmllc3RhISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYXBvdyEgVHdvIG5vdGVzIGluIGEgZGF5IC0geW91J3JlIGEgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEYgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBhZHZlbnR1cmU/XCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCJcclxuXTtcclxuXHJcbmNvbnN0IHJhbmRvbVBvaW50Tm90aWNlczogc3RyaW5nW10gPSBbXHJcblx0XCJCYXppbmdhISBZb3UganVzdCBzbmFnZ2VkIFtYXSBwb2ludHMhXCIsXHJcblx0XCJLYWJvb20hIFtYXSBwb2ludHMgYXJlIG5vdyBpbiB5b3VyIHBvY2tldCFcIixcclxuXHRcIldvb2hvbyEgW1hdIHBvaW50cyBlYXJuZWQhIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJQb2ludHMgYWhveSEgW1hdIG1vcmUgaW4gdGhlIGJhbmshXCIsXHJcblx0XCJTY29yZSEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHRvdGFsIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlppcHBpdHktemFwISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJDaGFtcGlvbiBtb3ZlISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIkJpbmdvISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIlNoYXphbSEgW1hdIHBvaW50cyB0byB0aGUgcmVzY3VlIVwiLFxyXG5cdFwiS2EtY2hpbmchIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkJyYXZvISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJXZWxsIGRvbmUhIFtYXSBtb3JlIHBvaW50cyBpbiB0b3chXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMsIGp1c3QgbGlrZSB0aGF0IVwiLFxyXG5cdFwiQSByb3VuZCBvZiBhcHBsYXVzZSBmb3IgW1hdIHBvaW50cyFcIixcclxuXHRcIldob29zaCEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJXb28hIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJHcmVhdCBqb2IhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiRmFudGFzdGljISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJIb29yYXkhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiTmljZSBvbmUhIFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldCFcIixcclxuXHRcIldvb3Qgd29vdCEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQmFtISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJDb29sIGJlYW5zISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIlNwbGVuZGlkISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJNYXJ2ZWxvdXMhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFueSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiRXhxdWlzaXRlISBbWF0gcG9pbnRzIGluIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJPdXRzdGFuZGluZyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugam9iIVwiLFxyXG5cdFwiTWFnbmlmaWNlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJUZXJyaWZpYyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiRXhjZWxsZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJBd2Vzb21lISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJXZWxsIHBsYXllZCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIkltcHJlc3NpdmUhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCcmlsbGlhbnQhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk5pY2UgbW92ZSEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiU3RlbGxhciEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJXZWxsIGRlc2VydmVkISBbWF0gcG9pbnRzIGVhcm5lZCFcIlxyXG5dO1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlVHdvTm90ZUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0d29Ob3RlTWVzc2FnZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gdHdvTm90ZU1lc3NhZ2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlUG9pbnRzKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHJhbmRvbVBvaW50Tm90aWNlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSByYW5kb21Qb2ludE5vdGljZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG4vLyBFeGFtcGxlIHVzYWdlXHJcbi8vIGNvbnN0IHJhbmRvbVBvaW50cyA9IDEwMDsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIHBvaW50cyB2YWx1ZVxyXG4vLyBjb25zdCByYW5kb21NZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShyYW5kb21Qb2ludHMpO1xyXG4vLyBjb25zb2xlLmxvZyhyYW5kb21NZXNzYWdlKTtcclxuXHJcblxyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFBLG1CQUFxRTs7O0FDQXJFLHNCQUErQztBQUd4QyxJQUFNLGtCQUFzQztBQUFBLEVBQ2pELG1CQUFtQjtBQUFBLEVBQ25CLFdBQVc7QUFBQSxFQUNYLFNBQVM7QUFBQSxFQUNULGdCQUFnQjtBQUFBLEVBQ2hC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UyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLElBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsS0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3RELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUN6RDtBQUVPLFNBQVMsa0JBQWtCLFFBQTJCO0FBQzNELE1BQUksUUFBbUIsVUFBVSxDQUFDO0FBQ2xDLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksVUFBVSxLQUFLLFFBQVE7QUFDekIsY0FBUTtBQUFBLElBQ1YsT0FBTztBQUNMO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLHFCQUFxQixhQUE2QjtBQUNoRSxNQUFJLGVBQWU7QUFDbkIsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxlQUFlLEtBQUssU0FBUyxnQkFBZ0IsR0FBRztBQUNsRCxxQkFBZSxLQUFLO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBR0YsU0FBTztBQUNQOzs7QUM5SUYsSUFBTSwwQkFBb0M7QUFBQSxFQUN6QztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0sa0JBQTRCO0FBQUEsRUFDakM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0scUJBQStCO0FBQUEsRUFDcEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFHTyxTQUFTLGdDQUFnQyxRQUF3QjtBQUN2RSxRQUFNLGNBQWMsS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLHdCQUF3QixNQUFNO0FBQzdFLFFBQU0sVUFBVSx3QkFBd0IsV0FBVztBQUNuRCxTQUFPLFFBQVEsUUFBUSxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ2hEO0FBR08sU0FBUyxpQ0FBaUMsUUFBd0I7QUFDeEUsUUFBTSxjQUFjLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSxnQkFBZ0IsTUFBTTtBQUNyRSxRQUFNLFVBQVUsZ0JBQWdCLFdBQVc7QUFDM0MsU0FBTyxRQUFRLFFBQVEsT0FBTyxPQUFPLFNBQVMsQ0FBQztBQUNoRDtBQUdPLFNBQVMsdUJBQXVCLFFBQXdCO0FBQzlELFFBQU0sY0FBYyxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksbUJBQW1CLE1BQU07QUFDeEUsUUFBTSxVQUFVLG1CQUFtQixXQUFXO0FBQzlDLFNBQU8sUUFBUSxRQUFRLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDaEQ7OztBM0NsSkEsSUFBcUIsZUFBckIsY0FBMEMsd0JBQU87QUFBQSxFQUFqRDtBQUFBO0FBSUMsU0FBUSxnQkFBZ0IsS0FBSyxpQkFBaUI7QUFDOUMsU0FBUSx3QkFBd0IsS0FBSyxjQUFjLFNBQVMsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQUE7QUFBQSxFQUVoRixNQUFNLFNBQVM7QUFDZCxZQUFRLElBQUksbUNBQW1DO0FBRS9DLFVBQU0sS0FBSyxhQUFhO0FBRXhCLFNBQUssY0FBYyxJQUFJLDJCQUEyQixLQUFLLEtBQUssSUFBSSxDQUFDO0FBR2pFLGVBQVcsWUFBWTtBQUV0QixZQUFNLEtBQUssZ0JBQWdCO0FBQUEsSUFDNUIsR0FBRyxHQUFJO0FBSVAsU0FBSyxnQkFBZ0IsS0FBSyxLQUFLO0FBQy9CLFNBQUssVUFBVSxPQUFPLFlBQVksS0FBSyxnQkFBZ0IsS0FBSyxJQUFJLEdBQUcsS0FBSyxhQUFhO0FBRXJGLFVBQU0sS0FBSyxnQkFBZ0IsS0FBSyxxQkFBcUI7QUFHckQsUUFBSSxLQUFLLFNBQVMsT0FBTTtBQUN2QixXQUFLLGNBQWMsaUJBQWlCLDBCQUEwQixZQUFZO0FBMEJ6RSxjQUFNLEtBQUssYUFBYTtBQUN4QixjQUFNLEtBQUssaUJBQWlCLEtBQUssU0FBUyxjQUFjO0FBR3hELGNBQU0sS0FBSyxnQkFBZ0I7QUFBQSxNQUc1QixDQUFDO0FBQUEsSUFDRjtBQUdBLFNBQUssY0FBYyxVQUFVLDJCQUEyQixZQUFZO0FBRW5FLFlBQU0sS0FBSyxzQkFBc0I7QUFBQSxJQUNsQyxDQUFDO0FBR0QsUUFBSSxLQUFLLFNBQVMsbUJBQWtCO0FBRW5DLFdBQUssV0FBVztBQUFBLFFBQ2YsSUFBSTtBQUFBLFFBQ0osTUFBTTtBQUFBLFFBQ04sVUFBVSxZQUFZO0FBQ3JCLGdCQUFNLEtBQUssZUFBZSxLQUFLLHFCQUFxQjtBQUFBLFFBQ3JEO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUVBLFFBQUksS0FBSyxTQUFTLG1CQUFrQjtBQUVuQyxXQUFLLFdBQVc7QUFBQSxRQUNmLElBQUk7QUFBQSxRQUNKLE1BQU07QUFBQSxRQUNOLFVBQVUsWUFBWTtBQUNyQixnQkFBTSxFQUFFLE1BQU0sSUFBSSxLQUFLO0FBQ3ZCLGdCQUFNLGlCQUFpQixLQUFLLEtBQUssS0FBSyxTQUFTLGNBQWM7QUFDN0QsZ0JBQU0sY0FBYyxNQUFNLEtBQUssWUFBWSxLQUFLO0FBQ2hELGdCQUFNLG9CQUFvQixLQUFLLFNBQVMsZ0JBQWdCLFdBQVc7QUFBQSxRQUNwRTtBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0Y7QUFHQSxRQUFJLEtBQUssU0FBUyxtQkFBbUI7QUFFcEMsV0FBSyxXQUFXO0FBQUEsUUFDZixJQUFJO0FBQUEsUUFDSixNQUFNO0FBQUEsUUFDTixVQUFVLFlBQVk7QUFDTixnQkFBTSxLQUFLLFVBQVU7QUFBQSxRQUN6QjtBQUFBLE1BRWIsQ0FBQztBQUFBLElBQ0Y7QUFHQSxTQUFLLFdBQVc7QUFBQSxNQUNmLElBQUk7QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFVBQVUsWUFBWTtBQUNyQixjQUFNLEVBQUUsTUFBTSxJQUFJO0FBQ2xCLGNBQU0sY0FBYyxNQUFNLEtBQUssWUFBWSxLQUFLO0FBQ2hELGNBQU0sb0JBQW9CLEtBQUssU0FBUyxnQkFBZ0IsV0FBVztBQUFBLE1BQ3BFO0FBQUEsSUFDRCxDQUFDO0FBSUQsU0FBSyxXQUFXO0FBQUEsTUFDZixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixVQUFVLFlBQVk7QUFDckIsY0FBTSxLQUFLLHNCQUFzQjtBQUFBLE1BQ2xDO0FBQUEsSUFDRCxDQUFDO0FBSUQsU0FBSyxXQUFXO0FBQUEsTUFDZixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixVQUFVLFlBQVk7QUFDckIsY0FBTSxxQkFBcUIsS0FBSyxTQUFTLHNCQUFzQixLQUFLLFNBQVMsb0JBQW9CO0FBQUEsTUFDbEc7QUFBQSxJQUNELENBQUM7QUFBQSxFQUVGO0FBQUEsRUFHRyxNQUFjLFlBQVk7QUFDdEIsVUFBTSxLQUFLLDBCQUEwQjtBQUNyQyxTQUFLLFNBQVMsY0FBYztBQUM1QixTQUFLLFNBQVMsZUFBZTtBQUM3QixTQUFLLFNBQVMsaUJBQWlCO0FBQy9CLFNBQUssU0FBUyxvQkFBb0I7QUFDbEMsU0FBSyxTQUFTLHFCQUFxQjtBQUNuQyxVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFDakMsVUFBTSxLQUFLLGlCQUFpQixDQUFDO0FBQzdCLFVBQU0sS0FBSyxnQkFBZ0IsS0FBSyxxQkFBcUI7QUFDckQsUUFBSSxvQkFBb0IsS0FBSyxLQUFLLHlEQUF5RCxLQUFLLFNBQVMsOEJBQThCLEVBQUUsS0FBSztBQUFBLEVBQ2xKO0FBQUEsRUFFQSxNQUFjLGVBQWUsdUJBQXdDO0FBQ3ZFLFNBQUssU0FBUyx3QkFBd0IsT0FBTyxJQUFJLEtBQUssR0FBRyxZQUFZO0FBQ3JFLFVBQU0sS0FBSyxhQUFhO0FBRXhCLFVBQU0sRUFBQyxNQUFLLElBQUksS0FBSztBQUNyQixVQUFNLGlCQUFpQixLQUFLLEtBQUssS0FBSyxTQUFTLGNBQWM7QUFDN0QsVUFBTSxjQUFjLE1BQU0sS0FBSyxZQUFZLEtBQUs7QUFDaEQsVUFBTSxvQkFBb0IsS0FBSyxTQUFTLGdCQUFnQixXQUFXO0FBQ25FLFVBQU0sS0FBSyxlQUFlO0FBQzFCLFVBQU0sZUFBd0IsTUFBTSxXQUFXLEtBQUssS0FBSyxLQUFLLFNBQVMsYUFBYSxLQUFLLFNBQVMsYUFBYTtBQUMvRyxZQUFRLElBQUkseUNBQXlDLGFBQWEsUUFBUTtBQUUxRSxRQUFJLGlCQUFpQjtBQUVyQixlQUFXLFlBQVksY0FBYztBQUNwQyxZQUFNLE9BQU87QUFDYixZQUFNLGVBQWUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQzlDLFlBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFDdEUsVUFBSSxjQUFjLFdBQVcsUUFBUSxXQUFXLEtBQUssU0FBUyxLQUFLLE1BQU07QUFDeEUsZ0JBQVEsS0FBSyxRQUFRLEtBQUssbUNBQW1DO0FBQzdEO0FBQUEsTUFDRDtBQUVBLFlBQU0sYUFBYSw0QkFBNEIsY0FBYyxTQUFTLFFBQVE7QUFDOUUsWUFBTSxpQkFBaUIsZUFBZSxVQUFVO0FBQ2hELFlBQU07QUFBQSxRQUNMO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNELElBQUksK0JBQStCLGNBQWMsU0FBUyxVQUFVLEtBQUssU0FBUyxzQkFBc0IsS0FBSyxTQUFTLG9CQUFvQjtBQUMxSSxZQUFNLHFCQUE2Qiw2QkFBNkIsV0FBVyxrQkFBa0IsU0FBUztBQUN0RyxZQUFNLGVBQWUsbUJBQW1CLEtBQUssSUFBSTtBQUNqRCxZQUFNLGVBQWUsY0FBYyxJQUFJO0FBQ3ZDLFlBQU0sY0FBYyxZQUFZLFlBQVk7QUFDNUMsWUFBTSxVQUFVLGFBQWEsb0JBQW9CLElBQUksQ0FBQztBQUN0RCxZQUFNLGVBQWUsb0JBQW9CLGdCQUFnQixjQUFjLGFBQWEsU0FBUyxrQkFBa0I7QUFHL0csY0FBUSxJQUFJLG1CQUFtQixTQUFTLG9CQUFvQixTQUFTLE1BQU07QUFFM0UsVUFBSTtBQUNILGNBQU0sS0FBSyxJQUFJLFlBQVksbUJBQW1CLE1BQU0sQ0FBQyxnQkFBZ0I7QUFDcEUsY0FBSSw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsWUFBWSxLQUFLLEdBQUc7QUFDbEYsOEJBQWtCLHFCQUFxQiw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsWUFBWTtBQUM5RyxpQkFBSyxpQkFBaUIscUJBQXFCLDZCQUE2QixnQ0FBZ0MsWUFBWSxDQUFDO0FBQUEsVUFDdEgsV0FBVyxFQUFFLG1CQUFtQixjQUFjO0FBQzdDLDhCQUFrQixxQkFBcUIsNkJBQTZCLEtBQUssWUFBWTtBQUNyRixpQkFBSyxpQkFBaUIscUJBQXFCLDZCQUE2QixLQUFLLFlBQVksQ0FBQztBQUFBLFVBQzNGO0FBRUEsY0FBSSw2QkFBNkIsWUFBWSxhQUFhLEdBQUcsWUFBWSxLQUFLLEtBQUssaUJBQWlCLGFBQWE7QUFDaEgsOEJBQWtCLGlCQUFpQiw2QkFBNkIsWUFBWSxhQUFhLEdBQUcsWUFBWTtBQUN4RyxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFBQSxVQUM5RyxXQUFXLEVBQUUsaUJBQWlCLGNBQWM7QUFDM0MsOEJBQWtCLGlCQUFpQiw2QkFBNkIsS0FBSyxZQUFZO0FBQ2pGLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssWUFBWSxDQUFDO0FBQUEsVUFDdkY7QUFFQSxjQUFJLDZCQUE2QixZQUFZLG1CQUFtQixHQUFHLGNBQWMsS0FBSyxHQUFHO0FBQ3hGLDhCQUFrQixpQkFBaUIsNkJBQTZCLFlBQVksbUJBQW1CLEdBQUcsY0FBYztBQUNoSCxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUFBLFVBQ3RILFdBQVcsRUFBRSx1QkFBdUIsY0FBYztBQUNqRCw4QkFBa0IsaUJBQWlCLDZCQUE2QixLQUFLLGNBQWM7QUFDbkYsaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxjQUFjLENBQUM7QUFBQSxVQUN6RjtBQUVBLGNBQUksNkJBQTZCLFlBQVksY0FBYyxHQUFHLFdBQVcsS0FBSyxHQUFHO0FBQ2hGLDhCQUFrQixpQkFBaUIsNkJBQTZCLFlBQVksY0FBYyxHQUFHLFdBQVc7QUFDeEcsaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsWUFBWSxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBQUEsVUFDOUcsV0FBVyxFQUFFLGtCQUFrQixjQUFjO0FBQzVDLDhCQUFrQixpQkFBaUIsNkJBQTZCLEtBQUssV0FBVztBQUNoRixpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixLQUFLLFdBQVcsQ0FBQztBQUFBLFVBQ3RGO0FBRUEsY0FBSSw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsT0FBTyxLQUFLLEdBQUc7QUFDN0UsOEJBQWtCLGlCQUFpQiw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsT0FBTztBQUNyRyxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFBQSxVQUMzRyxXQUFXLEVBQUUsbUJBQW1CLGNBQWM7QUFDN0MsOEJBQWtCLGlCQUFpQiw2QkFBNkIsS0FBSyxPQUFPO0FBQzVFLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssT0FBTyxDQUFDO0FBQUEsVUFDbEY7QUFFQSxjQUFJLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQixLQUFLLEdBQUc7QUFDN0csOEJBQWtCLGlCQUFpQiw2QkFBNkIsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0I7QUFDckksaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0IsQ0FBQztBQUFBLFVBQzNJLFdBQVcsRUFBRSx3Q0FBd0MsY0FBYztBQUNsRSw4QkFBa0IsaUJBQWlCLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQjtBQUNySSxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixLQUFLLGtCQUFrQixDQUFDO0FBQUEsVUFFN0Y7QUFHQSxlQUFLLGlCQUFpQixhQUFhLGNBQWMsZ0JBQWdCLGFBQWEsU0FBUyxvQkFBb0IsWUFBWTtBQUFBLFFBQ3hILENBQUM7QUFBQSxNQUNGLFNBQVNDLElBQVA7QUFDRCxhQUFJQSxNQUFBLGdCQUFBQSxHQUFHLFVBQVMsa0JBQWtCO0FBQ2pDLGdCQUFNLGVBQWUsZ0VBQWdFLEtBQUssUUFBUUEsR0FBRTtBQUNwRyxjQUFJLHdCQUFPLGNBQWMsR0FBSTtBQUM3QixrQkFBUSxNQUFNLFlBQVk7QUFBQSxRQUMzQjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQ0EsUUFBSSxpQkFBaUIsR0FBRztBQUN2QixVQUFJLGdCQUFnQjtBQUNwQixVQUFJLEtBQUssU0FBUyxtQkFBa0I7QUFDbkMsd0JBQWdCLEtBQUssU0FBUztBQUFBLE1BQy9CO0FBQ0EsVUFBSSx3QkFBTyxHQUFHLGlCQUFpQiwrQkFBK0I7QUFDOUQsY0FBUSxJQUFJLEdBQUcsaUJBQWlCLCtCQUErQjtBQUFBLElBQ2hFO0FBR0EsZUFBVyxZQUFZO0FBRXRCLFlBQU0sWUFBbUIscUJBQXFCLEtBQUssU0FBUyxXQUFXO0FBQ3ZFLFVBQUksd0JBQU8sc0JBQXNCLFVBQVUsZ0JBQWdCLFVBQVUsYUFBYTtBQUNsRixjQUFRLElBQUksY0FBYyxVQUFVLFVBQVUsVUFBVSxhQUFhO0FBQ3JFLFlBQU0sS0FBSyx1QkFBdUIsS0FBSyxTQUFTLGdCQUFnQixTQUFTO0FBQ3pFLFlBQU0sS0FBSyxnQ0FBZ0MsS0FBSyxTQUFTLGdCQUFnQixLQUFLLFNBQVMsV0FBVztBQUNsRyxZQUFNLEtBQUssZUFBZTtBQUMxQixZQUFNLEtBQUssZ0JBQWdCLHFCQUFxQjtBQUFBLElBQ2pELEdBQUcsR0FBSTtBQUVQLFFBQUksb0JBQW9CLEtBQUssS0FBSztBQUFBLDZCQUF3RTtBQUFBO0FBQUEsMkJBQXNELEtBQUssU0FBUztBQUFBO0FBQUEsZ0ZBQXVHLEVBQUUsS0FBSztBQUFBLEVBQzdSO0FBQUEsRUFFUSxpQkFBaUIsYUFBa0IsY0FBc0IsZ0JBQXdCLGFBQXFCLFNBQWlCLG9CQUE0QixjQUFzQjtBQUNoTCxnQkFBWSxhQUFhLElBQUksY0FBYyxZQUFZLGFBQWEsR0FBRyxZQUFZO0FBQ25GLGdCQUFZLG1CQUFtQixJQUFJLGNBQWMsWUFBWSxtQkFBbUIsR0FBRyxjQUFjO0FBQ2pHLGdCQUFZLGNBQWMsSUFBSSxjQUFjLFlBQVksY0FBYyxHQUFHLFdBQVc7QUFDcEYsZ0JBQVksZUFBZSxJQUFJLGNBQWMsWUFBWSxlQUFlLEdBQUcsT0FBTztBQUNsRixnQkFBWSxvQ0FBb0MsSUFBSSxjQUFjLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCO0FBQ3ZJLGdCQUFZLGVBQWUsSUFBSSxjQUFjLFlBQVksZUFBZSxHQUFHLFlBQVk7QUFBQSxFQUN4RjtBQUFBLEVBRUEsV0FBVztBQUNWLFlBQVEsSUFBSSxxQ0FBcUM7QUFHakQsUUFBSSxLQUFLLFlBQVksTUFBTTtBQUMxQixvQkFBYyxLQUFLLE9BQU87QUFDMUIsV0FBSyxVQUFVO0FBQUEsSUFDaEI7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLHdCQUF1QjtBQW5WOUI7QUFvVkUsVUFBTSxPQUFvQixLQUFLLElBQUksVUFBVSxjQUFjO0FBQzNELFFBQUksUUFBUSxNQUFNO0FBQ2pCLGNBQVEsTUFBTSxzQ0FBc0M7QUFBQSxJQUNyRDtBQUVBLFFBQUksK0JBQStCO0FBR25DLFVBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFDdEUsVUFBTSxlQUFlLHlDQUFZLE9BQU87QUFDeEMsVUFBTSxXQUFXLHlDQUFZLEtBQUs7QUFFbEMsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSxhQUFhO0FBQ2pCLFFBQUkscUJBQXFCO0FBRXpCLFFBQUksaUJBQWlCLFVBQWEsYUFBYSxRQUFXO0FBQ3pELG1CQUFhLDRCQUE0QixjQUFjLFFBQVE7QUFDL0QsdUJBQWlCLGVBQWUsVUFBVTtBQUcxQyxVQUFJLGlCQUFpQixRQUFRLGFBQWEsTUFBTTtBQUMvQyxjQUFNLEVBQUUsV0FBVyxrQkFBa0IsVUFBVSxJQUFJLCtCQUErQixjQUFjLFVBQVUsS0FBSyxTQUFTLHNCQUFzQixLQUFLLFNBQVMsb0JBQW9CO0FBQ2hMLDZCQUFxQiw2QkFBNkIsV0FBVyxrQkFBa0IsU0FBUztBQUFBLE1BQ3pGO0FBQUEsSUFDRDtBQUVBLFFBQUksZUFBZTtBQUNuQixRQUFJLGVBQWU7QUFDbkIsUUFBSSxjQUFjO0FBQ2xCLFFBQUksVUFBVTtBQUVkLFFBQUksU0FBUyxNQUFNO0FBQ2xCLHFCQUFlLG9CQUFtQixVQUFLLFNBQUwsWUFBYSxFQUFFO0FBQ2pELHFCQUFlLGNBQWMsSUFBSTtBQUNqQyxvQkFBYyxZQUFZLFlBQVk7QUFDdEMsZ0JBQVUsYUFBYSxvQkFBb0IsSUFBSSxDQUFDO0FBRWhELFlBQU0sZUFBZSxvQkFBb0IsZ0JBQWdCLGNBQWMsYUFBYSxTQUFTLGtCQUFrQjtBQUUvRyxVQUFJO0FBQ0gsY0FBTSxLQUFLLElBQUksWUFBWSxtQkFBbUIsTUFBTSxDQUFDLGdCQUFnQjtBQUNwRSxjQUFJLGFBQWE7QUFDaEIsZ0JBQUksaUJBQWlCO0FBQ3JCLGdCQUFJLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxZQUFZLEtBQUssR0FBRTtBQUNqRixzQkFBUSxJQUFJLG1CQUFtQjtBQUMvQixnQ0FBa0IscUJBQW1CLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxZQUFZO0FBQzVHLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIscUJBQXFCLDZCQUE2QixnQ0FBZ0MsWUFBWSxDQUFDO0FBQ3RJLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUIsV0FBVyxFQUFFLG1CQUFtQixjQUFhO0FBQzVDLGdDQUFrQixxQkFBbUIsNkJBQTZCLEtBQUssWUFBWTtBQUNuRixvQkFBTSxXQUFXLEtBQUssaUJBQWlCLHFCQUFxQiw2QkFBNkIsS0FBSyxZQUFZLENBQUM7QUFDM0csbUJBQUssZ0JBQWdCLFFBQVE7QUFDN0IsNkNBQStCO0FBQUEsWUFDaEM7QUFFQSxnQkFBSSw2QkFBNkIsWUFBWSxhQUFhLEdBQUcsWUFBWSxLQUFLLEtBQUssaUJBQWlCLGFBQVk7QUFDL0csZ0NBQWtCLGlCQUFlLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZO0FBQ3RHLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFDOUgsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFXLEVBQUUsaUJBQWlCLGNBQWE7QUFDMUMsZ0NBQWtCLGlCQUFlLDZCQUE2QixLQUFLLFlBQVk7QUFDL0Usb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssWUFBWSxDQUFDO0FBQ3ZHLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUI7QUFFQSxnQkFBSSw2QkFBNkIsWUFBWSxtQkFBbUIsR0FBRyxjQUFjLEtBQUssR0FBRTtBQUN2RixnQ0FBa0IsaUJBQWUsNkJBQTZCLFlBQVksbUJBQW1CLEdBQUcsY0FBYztBQUM5RyxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsWUFBWSxtQkFBbUIsR0FBRyxjQUFjLENBQUM7QUFDdEksbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFVLEVBQUUsdUJBQXVCLGNBQWE7QUFDL0MsZ0NBQWtCLGlCQUFlLDZCQUE2QixLQUFLLGNBQWM7QUFDakYsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssY0FBYyxDQUFDO0FBQ3pHLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUI7QUFFQSxnQkFBSSw2QkFBNkIsWUFBWSxjQUFjLEdBQUcsV0FBVyxLQUFLLEdBQUU7QUFDL0UsZ0NBQWtCLGlCQUFlLDZCQUE2QixZQUFZLGNBQWMsR0FBRyxXQUFXO0FBQ3RHLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGNBQWMsR0FBRyxXQUFXLENBQUM7QUFDOUgsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFVLEVBQUUsa0JBQWtCLGNBQWE7QUFDMUMsZ0NBQWtCLGlCQUFlLDZCQUE2QixLQUFLLFdBQVc7QUFDOUUsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssV0FBVyxDQUFDO0FBQ3RHLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUI7QUFFQSxnQkFBSSw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsT0FBTyxLQUFLLEdBQUU7QUFDNUUsZ0NBQWtCLGlCQUFlLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPO0FBQ25HLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFDM0gsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFVLEVBQUUsbUJBQW1CLGNBQWE7QUFDM0MsZ0NBQWtCLGlCQUFlLDZCQUE2QixLQUFLLE9BQU87QUFDMUUsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssT0FBTyxDQUFDO0FBQ2xHLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUI7QUFFQSxnQkFBSSw2QkFBNkIsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0IsS0FBSyxHQUFFO0FBQzVHLGdDQUFrQixpQkFBZSw2QkFBNkIsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0I7QUFDbkksb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCLENBQUM7QUFDM0osbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFVLEVBQUUsd0NBQXdDLGNBQWE7QUFDaEUsZ0NBQWtCLGlCQUFlLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQjtBQUNuSSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxrQkFBa0IsQ0FBQztBQUM3RyxtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCO0FBQ0Esb0JBQVEsSUFBSSxtQkFBbUIsZ0JBQWdCO0FBQy9DLGdCQUFJLGlCQUFpQixHQUFFO0FBQ3RCLG9CQUFNLGdCQUFnQix1QkFBdUIsa0JBQWtCLEtBQUssU0FBUyxxQkFBcUIsS0FBSyxTQUFTLGNBQWM7QUFDOUgsa0JBQUksd0JBQU8sYUFBYTtBQUN4QixzQkFBUSxJQUFJLGFBQWE7QUFBQSxZQUMxQjtBQUVBLGlCQUFLLGlCQUFpQixhQUFhLGNBQWMsZ0JBQWdCLGFBQWEsU0FBUyxvQkFBb0IsWUFBWTtBQUFBLFVBQ3hIO0FBQUEsUUFDRCxDQUFDO0FBQUEsTUFDRixTQUFTQSxJQUFQO0FBQ0QsYUFBSUEsTUFBQSxnQkFBQUEsR0FBRyxVQUFTLGtCQUFrQjtBQUNqQyxnQkFBTSxlQUFlLGdFQUFnRSxLQUFLLFFBQVFBLEdBQUU7QUFDcEcsY0FBSSx3QkFBTyxjQUFjLEdBQUk7QUFDN0Isa0JBQVEsTUFBTSxZQUFZO0FBQUEsUUFDM0I7QUFBQSxNQUNEO0FBQ0EsVUFBSSx3QkFBTyx3QkFBd0I7QUFDbkMsY0FBUSxJQUFJLHdCQUF3QjtBQUVwQyxZQUFNLEtBQUssZ0JBQWdCLEtBQUsscUJBQXFCO0FBQUEsSUFDdEQsT0FBTztBQUNOLGNBQVEsTUFBTSxzRUFBc0U7QUFBQSxJQUNyRjtBQUNBLFFBQUksOEJBQTZCO0FBQ2hDLFlBQU0sS0FBSyw4QkFBOEI7QUFDekMsWUFBTSxLQUFLLCtCQUErQjtBQUFBLElBQzNDO0FBQUEsRUFDRDtBQUFBLEVBR0EsTUFBTSxrQkFBaUI7QUFDdEIsUUFBSSxRQUFRO0FBQ1osUUFBRyxDQUFDLFVBQVUsT0FBTyxPQUFPLEtBQUssU0FBUyx1QkFBdUIsWUFBWSxDQUFDLEdBQUU7QUFDL0UsV0FBSyxTQUFTLHdCQUF3QjtBQUN0QyxXQUFLLFNBQVMsd0JBQXdCLE9BQU8sT0FBTyxFQUFFLE9BQU8sWUFBWTtBQUN6RSxZQUFNLEtBQUssYUFBYTtBQUN4QixjQUFRLElBQUkseUJBQXlCO0FBQ3JDLGNBQVE7QUFBQSxJQUNUO0FBQ0EsUUFBRyxDQUFDLGVBQWUsT0FBTyxPQUFPLEtBQUssU0FBUyx3QkFBd0IsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLE9BQU8sT0FBTyxLQUFLLFNBQVMsd0JBQXdCLFlBQVksQ0FBQyxHQUFFO0FBQ3RLLFdBQUssU0FBUyx5QkFBeUI7QUFDdkMsV0FBSyxTQUFTLHlCQUF5QixPQUFPLE9BQU8sRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLE9BQU8sWUFBWTtBQUM3RixXQUFLLHNCQUFzQixDQUFDO0FBQzVCLFdBQUssU0FBUyxvQkFBb0IsT0FBTyxPQUFPLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxPQUFPLFlBQVk7QUFDeEYsWUFBTSxLQUFLLGFBQWE7QUFDeEIsY0FBUSxJQUFJLDBCQUEwQjtBQUN0QyxjQUFRO0FBQUEsSUFDVDtBQUNBLFFBQUcsZUFBZSxPQUFPLE9BQU8sS0FBSyxTQUFTLHdCQUF3QixZQUFZLENBQUMsS0FBSyxLQUFLLFNBQVMsMEJBQTBCLEdBQUU7QUFDakksV0FBSyxTQUFTLHlCQUF5QjtBQUN2QyxXQUFLLFNBQVMseUJBQXlCLE9BQU8sT0FBTyxFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQUUsT0FBTyxZQUFZO0FBQzdGLFlBQU0sS0FBSyxhQUFhO0FBQ3hCLGNBQVE7QUFBQSxJQUNUO0FBQ0EsUUFBSSxPQUFNO0FBRVQsWUFBTSxLQUFLLGlCQUFpQixLQUFLLFNBQVMsY0FBYztBQUFBLElBQ3pEO0FBQUEsRUFFRDtBQUFBLEVBRUEsTUFBTSxnQ0FBK0I7QUFDcEMsUUFBSSwyQkFBMkIsS0FBSyxTQUFTO0FBQ3ZDLFFBQUksMkJBQTJCLEdBQUU7QUFDdEM7QUFDQSxXQUFLLFNBQVMsd0JBQXdCO0FBQ3RDLFlBQU0sS0FBSyxhQUFhO0FBRXhCLFVBQUcsNEJBQTRCLEdBQUU7QUFFaEMsY0FBTSxLQUFLLGlCQUFpQixLQUFLLFNBQVMsY0FBYztBQUN4RCxnQkFBUSxJQUFJLEdBQUcsaURBQWlEO0FBQUEsTUFDakUsV0FBVyw0QkFBNEIsR0FBRztBQUN6QyxhQUFLLHNCQUFzQixHQUFHO0FBQzlCLGFBQUssU0FBUyxvQkFBb0IsT0FBTyxPQUFPLEVBQUUsT0FBTyxZQUFZO0FBQ3JFLGNBQU0sS0FBSyxhQUFhO0FBQ3hCLGNBQU0sS0FBSyxpQkFBaUIsdUJBQXVCO0FBQ25ELGNBQU0sVUFBVSxpQ0FBaUMsMkJBQTJCLEtBQUssU0FBUyxxQkFBcUIsS0FBSyxTQUFTLGNBQWM7QUFDM0ksZ0JBQVEsSUFBSSw0QkFBNEIscUNBQXFDO0FBQzdFLFlBQUksd0JBQU8sT0FBTztBQUNsQixnQkFBUSxJQUFJLE9BQU87QUFBQSxNQUNwQixPQUFPO0FBRU4sZ0JBQVEsSUFBSSxHQUFHLGlEQUFpRDtBQUFBLE1BQ2pFO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUVBLE1BQU0saUNBQWdDO0FBQ3JDLFFBQUcsZUFBZSxPQUFPLE9BQU8sS0FBSyxTQUFTLHdCQUF3QixZQUFZLENBQUMsR0FBRTtBQUNwRixZQUFNLEtBQUssa0NBQWtDO0FBQUEsSUFDOUMsV0FBVyxVQUFVLE9BQU8sT0FBTyxLQUFLLFNBQVMsd0JBQXdCLFlBQVksQ0FBQyxHQUFFO0FBRXZGLGNBQVEsSUFBSSw4Q0FBOEM7QUFBQSxJQUMzRCxPQUFPO0FBQ04sV0FBSyxTQUFTLHlCQUF5QixPQUFPLE9BQU8sRUFBRSxPQUFPLFlBQVk7QUFDMUUsV0FBSyxTQUFTLHlCQUF5QjtBQUN2QyxZQUFNLEtBQUssYUFBYTtBQUFBLElBQ3pCO0FBQUEsRUFDRDtBQUFBLEVBRUEsTUFBYyxvQ0FBb0M7QUFDakQsUUFBSSw0QkFBNEIsS0FBSyxTQUFTO0FBQzlDLFFBQUksNEJBQTRCLEdBQUc7QUFDbEM7QUFDQSxXQUFLLFNBQVMseUJBQXlCLE9BQU8sT0FBTyxFQUFFLE9BQU8sWUFBWTtBQUMxRSxXQUFLLFNBQVMseUJBQXlCO0FBQ3ZDLFlBQU0sS0FBSyxhQUFhO0FBRXhCLFlBQU0sS0FBSyxzQ0FBc0MseUJBQXlCO0FBQUEsSUFDM0U7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFjLHNDQUFzQywyQkFBbUM7QUFDdEYsUUFBSSw2QkFBNkIsR0FBRztBQUVuQyxZQUFNLEtBQUssaUJBQWlCLEtBQUssU0FBUyxjQUFjO0FBQ3hELGNBQVEsSUFBSSxHQUFHLHVEQUF1RDtBQUFBLElBQ3ZFLFdBQVcsNkJBQTZCLEdBQUc7QUFDMUMsV0FBSyxzQkFBc0IsQ0FBQztBQUM1QixXQUFLLFNBQVMsb0JBQW9CLE9BQU8sT0FBTyxFQUFFLE9BQU8sWUFBWTtBQUNyRSxZQUFNLEtBQUssYUFBYTtBQUN4QixZQUFNLEtBQUssaUJBQWlCLHdCQUF3QjtBQUNwRCxjQUFRLElBQUksNkJBQTZCLGlEQUFpRDtBQUMxRixZQUFNLFVBQVUsZ0NBQWdDLDRCQUE0QixLQUFLLFNBQVMscUJBQXFCLEtBQUssU0FBUyxjQUFjO0FBQzNJLFVBQUksd0JBQU8sT0FBTztBQUNsQixjQUFRLElBQUksT0FBTztBQUFBLElBQ3BCLE9BQU87QUFFTixjQUFRLElBQUksR0FBRyx1REFBdUQ7QUFBQSxJQUN2RTtBQUFBLEVBQ0Q7QUFBQSxFQUVBLE1BQU0sZ0JBQWdCLFdBQTJCO0FBQ2hELFVBQU0sZUFBZSxrQkFBa0IsS0FBSyxTQUFTLFlBQVk7QUFDakUsVUFBTSxzQkFBc0IsS0FBSyxTQUFTLGVBQWUsYUFBYSxXQUFTLGFBQWEsYUFBYSxhQUFhLFVBQVE7QUFDOUgsVUFBTSxxQkFBcUI7QUFDM0IsVUFBTSxZQUFZLEtBQUssTUFBTSxxQkFBcUIsa0JBQWtCO0FBQ3BFLGNBQVUsUUFBUSxrQkFBVyxLQUFLLFNBQVMsaUJBQWlCLEtBQUssa0JBQWtCLG9CQUFvQixTQUFTLEdBQUc7QUFBQSxFQUNwSDtBQUFBLEVBRVEsa0JBQWtCLG9CQUE0QixXQUFtQjtBQUN4RSxRQUFJLGNBQWM7QUFDbEIsYUFBU0MsS0FBSSxHQUFHQSxNQUFLLG9CQUFvQkEsTUFBSztBQUM3QyxVQUFJQSxNQUFLLFdBQVc7QUFDbkIsdUJBQWU7QUFBQSxNQUNoQixPQUFPO0FBQ04sdUJBQWU7QUFBQSxNQUNoQjtBQUFBLElBQ0Q7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsTUFBTSxlQUFlO0FBQ3BCLFNBQUssV0FBVyxPQUFPLE9BQU8sQ0FBQyxHQUFHLGlCQUFpQixNQUFNLEtBQUssU0FBUyxDQUFDO0FBQ3hFLFlBQVEsSUFBSSxnQkFBZ0I7QUFBQSxFQUM3QjtBQUFBLEVBR0EsTUFBTSxlQUFlO0FBQ3BCLFVBQU0sS0FBSyxTQUFTLEtBQUssUUFBUTtBQUFBLEVBQ2xDO0FBQUEsRUFFQSxNQUFNLGlCQUFpQixhQUFzQztBQUM1RCxRQUFJLGdCQUFnQjtBQUNwQixRQUFJLGdCQUFnQixLQUFLLFNBQVM7QUFDbEMsUUFBSSxLQUFLLFNBQVMsbUJBQWtCO0FBQ25DLHNCQUFnQixLQUFLLFNBQVM7QUFBQSxJQUMvQjtBQUVBLFNBQUssU0FBUyxlQUFlLGVBQWUsZ0JBQWdCLGlCQUFpQixLQUFLLFNBQVM7QUFDM0YsVUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBRWpDLFdBQU8sS0FBSyxpQkFBaUIsS0FBSyxTQUFTLGNBQWM7QUFBQSxFQUMxRDtBQUFBLEVBRUEsTUFBTSxzQkFBc0IsZUFBcUI7QUFDaEQsVUFBTSxXQUFXLFlBQVksS0FBSyxTQUFTLGdCQUFnQixlQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3BGLFNBQUssU0FBUyxnQkFBZ0I7QUFDOUIsVUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQ2pDLFlBQVEsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLGVBQWU7QUFBQSxFQUM1RDtBQUFBLEVBR0EsTUFBTSxzQkFBc0IsZUFBcUI7QUFDaEQsUUFBSSxXQUFXLFlBQVksS0FBSyxTQUFTLGdCQUFnQixlQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ2xGLFNBQUssU0FBUyxnQkFBZ0I7QUFDOUIsUUFBSSxXQUFXLEdBQUU7QUFDaEIsaUJBQVc7QUFBQSxJQUNaO0FBQ0EsU0FBSyxTQUFTLGdCQUFnQjtBQUM5QixVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFBQSxFQUNsQztBQUFBLEVBS0EsTUFBTSxpQkFBaUIsZ0JBQXlDO0FBQy9ELFVBQU0sZUFBZSxJQUFJLE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CO0FBQzNFLFFBQUksZ0JBQWdCLE1BQU07QUFDekIsY0FBUSxJQUFJLFFBQVEsa0NBQWtDO0FBQ3RELGFBQU87QUFBQSxJQUNSO0FBQ0EsVUFBTSxPQUFPO0FBR2IsVUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QyxRQUFJLFlBQTJCO0FBQy9CLFFBQUksYUFBNEI7QUFDaEMsUUFBSSxhQUE0QjtBQUNoQyxRQUFJLGFBQTRCO0FBQ2hDLFFBQUksTUFBcUI7QUFDekIsUUFBSSxRQUF1QjtBQUMzQixRQUFJLE9BQXNCO0FBQzFCLFFBQUksU0FBd0I7QUFDNUIsUUFBSSxPQUFzQjtBQUMxQixRQUFJLFNBQXdCO0FBQzVCLFFBQUksT0FBc0I7QUFDMUIsUUFBSSxTQUF3QjtBQUU1QixVQUFNLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDaEMsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLE1BQU0sUUFBUUEsTUFBSztBQUN0QyxZQUFNLE9BQU8sTUFBTUEsRUFBQyxFQUFFLEtBQUs7QUFDM0IsVUFBSSxTQUFTLG1CQUFtQjtBQUMvQixZQUFJLGNBQWMsTUFBTTtBQUN2QixzQkFBWUE7QUFBQSxRQUNiO0FBQUEsTUFDRDtBQUNBLFVBQUksU0FBUyx3QkFBd0I7QUFDcEMsWUFBSSxlQUFlLE1BQU07QUFDeEIsdUJBQWFBO0FBQUEsUUFDZDtBQUFBLE1BQ0Q7QUFDQSxVQUFJLFNBQVMseUJBQXlCO0FBQ3JDLFlBQUksZUFBZSxNQUFNO0FBQ3hCLHVCQUFhQTtBQUFBLFFBQ2Q7QUFBQSxNQUNEO0FBQ0EsVUFBSSxTQUFTLGtCQUFrQjtBQUM5QixZQUFJLGVBQWUsTUFBTTtBQUN4Qix1QkFBYUE7QUFBQSxRQUNkO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxVQUFNLFlBQVksS0FBSyxTQUFTO0FBRWhDLFVBQU0sUUFBUSxrQkFBa0IsU0FBUztBQUN6QyxRQUFJLGNBQWMsS0FBSyxTQUFTO0FBQ2hDLFFBQUksZUFBZTtBQUNuQixRQUFJLEtBQUssU0FBUyxjQUFjLE1BQU0sT0FBTTtBQUUzQyxVQUFJLHdCQUFPLFFBQVEsMENBQTBDLE1BQU0sUUFBUTtBQUUzRSxxQkFBZSxxQkFBcUIsS0FBSyxTQUFTLGFBQWEsTUFBTSxLQUFLO0FBQzFFLFdBQUssU0FBUyxjQUFjLE1BQU07QUFDbEMsb0JBQWMsTUFBTTtBQUNwQixXQUFLLFNBQVMsaUJBQWlCLE1BQU07QUFDckMsWUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQUEsSUFDbEM7QUFFQSxVQUFNLGlCQUFpQixjQUFjO0FBQ3JDLFVBQU0sa0JBQWtCLHNCQUFzQixNQUFNLFFBQVEsc0JBQXNCLFlBQVksd0hBQXdILFlBQVksMERBQTBELGlCQUFpQixjQUFjLE1BQU0sU0FBUyxhQUFhLE1BQU0sYUFBYTtBQUMxVyxVQUFNLGlCQUFpQixxQ0FBcUMsS0FBSyxTQUFTLHdCQUF3QjtBQUNsRyxVQUFNLHdCQUFpQyxJQUFJLEtBQUssU0FBUztBQUN6RCxVQUFNLGtCQUFrQiw0Q0FBNEMsS0FBSyxTQUFTLHlCQUF5Qiw2SUFBNkksS0FBSyxTQUFTLHlCQUF5QiwwREFBMEQsd0JBQXdCO0FBQ2pYLFVBQU0sZ0JBQWdCLDhCQUE4QixLQUFLLFNBQVMsZ0JBQWdCO0FBRWxGLFFBQUksYUFBYSxRQUFRLGNBQWMsUUFBUSxjQUFjLFFBQVEsY0FBYyxNQUFLO0FBQ3ZGLGNBQVEsWUFBWTtBQUNwQixZQUFNLFlBQVk7QUFDbEIsZUFBUyxhQUFhLElBQUk7QUFDMUIsYUFBTyxhQUFhO0FBQ3BCLGVBQVMsYUFBYSxJQUFHO0FBQ3pCLGFBQU8sYUFBYSxLQUFJO0FBQ3hCLGVBQVMsYUFBYSxJQUFJO0FBQzFCLGFBQU8sYUFBYTtBQUdwQixZQUFNLFdBQVcsQ0FBQyxHQUFHLE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxpQkFBaUIsR0FBRyxNQUFNLE1BQU0sR0FBRyxDQUFDO0FBQ2hGLFlBQU0sWUFBWSxDQUFDLEdBQUcsU0FBUyxNQUFNLEdBQUcsTUFBTSxHQUFHLGdCQUFnQixHQUFHLFNBQVMsTUFBTSxJQUFJLENBQUM7QUFDeEYsWUFBTSxZQUFZLENBQUMsR0FBRyxVQUFVLE1BQU0sR0FBRyxNQUFNLEdBQUcsaUJBQWlCLEdBQUcsVUFBVSxNQUFNLElBQUksQ0FBQztBQUMzRixZQUFNLFlBQVksQ0FBQyxHQUFHLFVBQVUsTUFBTSxHQUFHLE1BQU0sR0FBRyxlQUFlLEdBQUcsVUFBVSxNQUFNLElBQUksQ0FBQztBQUN6RixZQUFNLElBQUksTUFBTSxPQUFPLE1BQU0sVUFBVSxLQUFLLElBQUksQ0FBQztBQUFBLElBQ2xEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUdBLE1BQU0sbUJBQW1CLGdCQUF3QixPQUFhO0FBQzdELFVBQU0sZUFBZSxJQUFJLE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CO0FBQzNFLFFBQUksZ0JBQWdCLE1BQU07QUFDekIsY0FBUSxJQUFJLFFBQVEsa0NBQWtDO0FBQ3REO0FBQUEsSUFDRDtBQUNBLFVBQU0sT0FBTztBQUViLFVBQU0sVUFBVSxNQUFNLElBQUksTUFBTSxLQUFLLElBQUk7QUFDekMsUUFBSSxZQUEyQjtBQUMvQixRQUFJLGFBQTRCO0FBQ2hDLFFBQUksTUFBcUI7QUFDekIsUUFBSSxRQUF1QjtBQUMzQixRQUFJLE9BQXNCO0FBQzFCLFFBQUksU0FBd0I7QUFFNUIsVUFBTSxRQUFRLFFBQVEsTUFBTSxJQUFJO0FBQ2hDLGFBQVNBLEtBQUksR0FBR0EsS0FBSSxNQUFNLFFBQVFBLE1BQUs7QUFDdEMsWUFBTSxPQUFPLE1BQU1BLEVBQUMsRUFBRSxLQUFLO0FBQzNCLFVBQUksU0FBUyxpQkFBaUI7QUFDN0IsWUFBSSxjQUFjLE1BQU07QUFDdkIsc0JBQVlBO0FBQUEsUUFDYjtBQUFBLE1BQ0Q7QUFDQSxVQUFJLFNBQVMsTUFBTSxRQUFRLFFBQVEsTUFBTSxPQUFPLEtBQUk7QUFDbkQsWUFBSSxlQUFlLE1BQU07QUFDeEIsdUJBQWFBO0FBQUEsUUFDZDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQ0EsUUFBSSxhQUFhLFFBQVEsY0FBYyxNQUFLO0FBQzNDLFlBQU0sWUFBWTtBQUNsQixjQUFRLFlBQVk7QUFFcEIsYUFBTyxhQUFhO0FBQ3BCLGVBQVMsYUFBYTtBQUV0QixZQUFNLGNBQWMsT0FBTyxNQUFNLE9BQU8sUUFBUSxNQUFNLFFBQVEsU0FBUyxNQUFNLGNBQWMsU0FBUyxPQUFPLE9BQU8sRUFBRSxPQUFPLFFBQVEsSUFBSTtBQUN2SSxZQUFNLFdBQVcsQ0FBQyxHQUFHLE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxhQUFhLEdBQUcsTUFBTSxNQUFNLEdBQUcsQ0FBQztBQUM1RSxZQUFNLFlBQVksQ0FBQyxHQUFHLFNBQVMsTUFBTSxHQUFHLE1BQU0sR0FBRyxHQUFHLFNBQVMsTUFBTSxJQUFJLENBQUM7QUFDeEUsWUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFVBQVUsS0FBSyxJQUFJLENBQUM7QUFDakQsY0FBUSxJQUFJLGdCQUFnQixhQUFhO0FBQUEsSUFDMUM7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLHVCQUF1QixnQkFBd0IsT0FBYTtBQUNqRSxVQUFNLGVBQWUsSUFBSSxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQjtBQUMzRSxRQUFJLGdCQUFnQixNQUFNO0FBQ3pCLGNBQVEsSUFBSSxRQUFRLGtDQUFrQztBQUN0RDtBQUFBLElBQ0Q7QUFDQSxVQUFNLE9BQU87QUFFYixVQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQ3pDLFFBQUksWUFBMkI7QUFDL0IsUUFBSSxNQUFxQjtBQUN6QixRQUFJLFFBQXVCO0FBRTNCLFVBQU0sUUFBUSxRQUFRLE1BQU0sSUFBSTtBQUNoQyxhQUFTQSxLQUFJLEdBQUdBLEtBQUksTUFBTSxRQUFRQSxNQUFLO0FBQ3RDLFlBQU0sT0FBTyxNQUFNQSxFQUFDLEVBQUUsS0FBSztBQUMzQixVQUFJLFNBQVMsaUJBQWlCO0FBQzdCLFlBQUksY0FBYyxNQUFNO0FBQ3ZCLHNCQUFZQTtBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUNBLFFBQUksYUFBYSxNQUFNO0FBQ3RCLFlBQU0sWUFBWTtBQUNsQixjQUFRLFlBQVk7QUFFcEIsWUFBTSxjQUFjLE9BQU8sTUFBTSxPQUFPLFdBQVcsTUFBTSxjQUFjLFNBQVMsT0FBTyxPQUFPLEVBQUUsT0FBTyxRQUFRLElBQUk7QUFDbkgsWUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsYUFBYSxHQUFHLE1BQU0sTUFBTSxHQUFHLENBQUM7QUFDNUUsWUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFDaEQsY0FBUSxJQUFJLGdCQUFnQixhQUFhO0FBQUEsSUFDMUM7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLGdDQUFnQyxnQkFBd0IsT0FBYztBQUMzRSxVQUFNLGVBQWUsSUFBSSxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQjtBQUMzRSxRQUFJLGdCQUFnQixNQUFNO0FBQ3pCLGNBQVEsSUFBSSxRQUFRLGtDQUFrQztBQUN0RDtBQUFBLElBQ0Q7QUFDQSxVQUFNLE9BQU87QUFFYixVQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQ3pDLFFBQUksWUFBMkI7QUFDL0IsUUFBSSxhQUE0QjtBQUVoQyxVQUFNLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDaEMsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLE1BQU0sUUFBUUEsTUFBSztBQUN0QyxZQUFNLE9BQU8sTUFBTUEsRUFBQyxFQUFFLEtBQUs7QUFDM0IsVUFBSSxTQUFTLG9CQUFvQjtBQUNoQyxZQUFJLGNBQWMsTUFBTTtBQUN2QixzQkFBWUE7QUFBQSxRQUNiO0FBQUEsTUFDRDtBQUNBLFVBQUksYUFBYSxRQUFRLGNBQWMsTUFBSztBQUUzQyxjQUFNLGFBQWE7QUFFbkIsY0FBTUMsU0FBUSxLQUFLLE1BQU0sVUFBVTtBQUVuQyxZQUFHQSxRQUFNO0FBQ1IsZ0JBQU0sY0FBYyxTQUFTQSxPQUFNLENBQUMsR0FBRyxFQUFFO0FBQ3pDLGNBQUksY0FBYyxPQUFPO0FBQ3hCLHlCQUFhRDtBQUFBLFVBQ2Q7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFDQSxRQUFJLGFBQWEsUUFBUSxjQUFjLE1BQUs7QUFDM0MsWUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxHQUFHLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFDOUUsWUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFBQSxJQUNqRDtBQUFBLEVBQ0Q7QUFBQSxFQUdBLE1BQU0sWUFBWSxPQUE4QjtBQUMvQyxVQUFNLFFBQVEsTUFBTSxpQkFBaUI7QUFDckMsVUFBTSxlQUFlLHlCQUF5QixLQUFLO0FBR25ELFVBQU0sZUFBZSxhQUFhLEtBQUs7QUFHdkMsUUFBSSxlQUFlO0FBQ25CLFFBQUksWUFBWSxJQUFJLEtBQUssWUFBWTtBQUVyQyxVQUFNLHNCQUFzQixvQkFBSSxJQUFvQjtBQUNwRCxVQUFNLGFBQWEsY0FBYyxJQUFJLEtBQUssWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ25FLFFBQUksYUFBYSxVQUFVLFNBQVMsSUFBRSxJQUFJLE1BQU0sVUFBVSxZQUFZO0FBQ3RFLFFBQUksU0FBUztBQVViLG1CQUFlO0FBQ2YsZ0JBQVksSUFBSSxLQUFLLFlBQVk7QUFDakMsaUJBQWEsVUFBVSxTQUFTLElBQUUsSUFBSSxNQUFNLFVBQVUsWUFBWTtBQUVsRSxXQUFPLGVBQWUsWUFBVztBQUNoQyxtQkFBYSxVQUFVLFNBQVMsSUFBRSxJQUFJLE1BQU0sVUFBVSxZQUFZO0FBRWxFLGVBQVMsU0FBUyxhQUFhO0FBQy9CLGdCQUFVLFNBQVMsVUFBVSxTQUFTLElBQUksQ0FBQztBQUMzQyxzQkFBZ0I7QUFDaEIsMEJBQW9CLElBQUksWUFBWSxDQUFDO0FBQUEsSUFDdEM7QUFDQSxhQUFTLE9BQU8sTUFBTSxHQUFFLE9BQU8sU0FBTyxDQUFDO0FBa0J2QyxVQUFNLG9CQUFvQixxQkFBcUIsS0FBSztBQUNwRCxhQUFTQSxLQUFJLEdBQUdBLEtBQUksa0JBQWtCLFFBQVFBLE1BQUk7QUFFakQsWUFBTSxnQkFBZ0IsT0FBTyxrQkFBa0JBLEVBQUMsR0FBRyxRQUFRO0FBQzNELFlBQU0sZUFBZSxvQkFBb0IsSUFBSSxhQUFhO0FBRTFELFVBQUksaUJBQWlCLFFBQVc7QUFDL0IsNEJBQW9CLElBQUksZUFBZSxlQUFlLENBQUM7QUFBQSxNQUN4RCxPQUFPO0FBRU4sNEJBQW9CLElBQUksZUFBZSxDQUFDO0FBQUEsTUFDekM7QUFBQSxJQUNEO0FBVUEsUUFBSSxxQkFBcUI7QUFDekIsZUFBVyxDQUFDLEtBQUssS0FBSyxxQkFBcUI7QUFFMUMsMkJBQXFCLHFCQUFxQixRQUFRO0FBQUEsSUFDbkQ7QUFDQSx5QkFBcUIsbUJBQW1CLE1BQU0sR0FBRSxtQkFBbUIsU0FBTyxDQUFDO0FBRTNFLFdBQU8sa0JBQWtCLFFBQVEsb0JBQW9CLEtBQUssU0FBUyxzQkFBc0I7QUFBQSxFQUMxRjtBQUFBLEVBRUEsTUFBTSxnQkFBZ0IsVUFBMkI7QUFDaEQsYUFBUyxLQUFLLENBQUMsV0FBbUI7QUFDakMsVUFBRyxRQUFPO0FBQ1QsY0FBTSxRQUFnQixpQkFBaUIsS0FBSyxTQUFTLGFBQWEsS0FBSztBQUN2RSxZQUFJLHdCQUFPLHNCQUFzQixNQUFNLGdCQUFnQixNQUFNLGFBQWE7QUFDMUUsZ0JBQVEsSUFBSSxzQkFBc0IsTUFBTSxnQkFBZ0IsTUFBTSxhQUFhO0FBRTNFLGFBQUssbUJBQW1CLEtBQUssU0FBUyxnQkFBZ0IsS0FBSztBQUMzRCxhQUFLLFNBQVMsb0JBQW9CO0FBQ2xDLGFBQUssU0FBUyxxQkFBcUI7QUFDbkMsYUFBSyxTQUFTLEtBQUssUUFBUTtBQUFBLE1BQzVCO0FBQUEsSUFDRCxDQUFDO0FBQUEsRUFDRjtBQUFBLEVBR0EsTUFBTSw0QkFBNEI7QUFFakMsVUFBTSxFQUFFLE1BQU0sSUFBSSxLQUFLO0FBS3ZCLFVBQU0sZUFBZSxNQUFNLGdCQUFnQixLQUFLLEtBQUssS0FBSyxTQUFTLGFBQWEsS0FBSyxTQUFTLGFBQWE7QUFDM0csZUFBVyxZQUFZLGFBQWEsS0FBSyxHQUFHO0FBQzNDLFlBQU0sUUFBUSxNQUFNLFNBQVM7QUFDN0IsWUFBTSxPQUFPLE1BQU0sS0FBSyxDQUFBRSxVQUFRQSxNQUFLLGFBQWEsUUFBUTtBQUMxRCxVQUFJLENBQUMsTUFBTTtBQUNWLGdCQUFRLEtBQUssUUFBUSxxQkFBcUI7QUFDMUM7QUFBQSxNQUNEO0FBRUEsY0FBUSxJQUFJLG1CQUFtQixVQUFVO0FBQ3pDLFVBQUk7QUFDSCxjQUFNLEtBQUssSUFBSSxZQUFZLG1CQUFtQixNQUFNLENBQUMsZ0JBQWdCO0FBQ3BFLGlCQUFPLFlBQVksYUFBYTtBQUNoQyxpQkFBTyxZQUFZLG1CQUFtQjtBQUN0QyxpQkFBTyxZQUFZLGNBQWM7QUFDakMsaUJBQU8sWUFBWSxlQUFlO0FBQ2xDLGlCQUFPLFlBQVksb0NBQW9DO0FBQ3ZELGlCQUFPLFlBQVksZUFBZTtBQUFBLFFBQ25DLENBQUM7QUFBQSxNQUNGLFNBQVNILElBQVA7QUFDRCxhQUFJQSxNQUFBLGdCQUFBQSxHQUFHLFVBQVMsa0JBQWtCO0FBQ2pDLGdCQUFNLGVBQWUsaURBQWlEQSxHQUFFO0FBQ3hFLGNBQUksd0JBQU8sY0FBYyxHQUFJO0FBQzdCLGtCQUFRLE1BQU0sWUFBWTtBQUFBLFFBQzNCO0FBQUEsTUFDRDtBQUFBLElBRUQ7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLG9CQUFvQixjQUFzQztBQUMvRCxRQUFJLGlCQUFpQjtBQUNyQixhQUFTQyxLQUFJLGNBQWNBLEtBQUksS0FBS0EsTUFBSTtBQUN2QyxZQUFNLFFBQWdCLGlCQUFpQkEsSUFBRyxJQUFJO0FBRTlDLFlBQU0sYUFBYTtBQUVuQixZQUFNQyxTQUFRLE1BQU0sTUFBTSxNQUFNLFVBQVU7QUFDMUMsVUFBR0EsUUFBTTtBQUNSLGNBQU0sY0FBYyxTQUFTQSxPQUFNLENBQUMsR0FBRyxFQUFFO0FBQ3pDLFlBQUksY0FBYyxnQkFBZ0Isa0JBQWtCLEdBQUk7QUFDdkQsMkJBQWlCO0FBQUEsUUFDbEI7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUNBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFFQSxNQUFNLGlCQUFrQztBQUN2QyxVQUFNLGNBQWMsTUFBTSxLQUFLLG9CQUFvQixLQUFLLFNBQVMsV0FBVztBQUM1RSxVQUFNLHNCQUFzQixxQkFBcUIsV0FBVztBQUk1RCxVQUFNLGdCQUFnQixLQUFLLE9BQU8sc0JBQXNCLEtBQUssU0FBUyxnQkFBYyxLQUFHLEdBQUc7QUFDMUYsU0FBSyxTQUFTLHFCQUFxQjtBQUNuQyxTQUFLLFNBQVMsb0JBQW9CO0FBQ2xDLFVBQU0sS0FBSyxTQUFTLEtBQUssUUFBUTtBQUVqQyxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsTUFBTSxpQkFBaUI7QUFqZ0N4QjtBQWtnQ0UsVUFBTSxlQUFlLElBQUksTUFBTSxzQkFBc0IsR0FBRyxLQUFLLFNBQVMsbUJBQW1CO0FBQ3pGLFFBQUksY0FBYTtBQUNoQixZQUFNLGVBQWEsVUFBSyxJQUFJLFVBQVUsY0FBYyxNQUFqQyxtQkFBb0MsU0FBUTtBQUMvRCxZQUFNLElBQUksVUFBVSxhQUFhLGFBQWEsTUFBTSxVQUFVO0FBQUEsSUFDL0QsT0FBTztBQUNOLGNBQVEsSUFBSSxtQ0FBbUM7QUFBQSxJQUNoRDtBQUFBLEVBQ0Q7QUFFRDtBQUdBLFNBQVMsVUFBVSxXQUE0QjtBQUM5QyxRQUFNLGNBQWMsT0FBTyxPQUFPO0FBQ2xDLFNBQU8sWUFBWSxPQUFPLFdBQVcsS0FBSztBQUMzQztBQUVBLFNBQVMsZUFBZSxXQUE0QjtBQUNuRCxRQUFNLHNCQUFzQixPQUFPLE9BQU8sRUFBRSxTQUFTLEdBQUcsS0FBSztBQUM3RCxTQUFPLFVBQVUsT0FBTyxxQkFBcUIsS0FBSztBQUNuRDtBQUtBLGVBQWUsaUJBQWlCRSxNQUFVLFVBQWlDO0FBTTFFLFFBQU0sZUFBZUEsS0FBSSxNQUFNLHNCQUFzQixHQUFHLGFBQWE7QUFDckUsTUFBSSx3QkFBd0Isd0JBQU87QUFDbEMsWUFBUSxJQUFJLFFBQVEsNEJBQTRCO0FBQ2hEO0FBQUEsRUFDRDtBQUVBLFFBQU1BLEtBQUksTUFBTSxPQUFPLEdBQUcsZUFBZSxpQkFBaUI7QUFFM0Q7QUFHQSxJQUFNLHNCQUFOLGNBQWtDLHVCQUFNO0FBQUE7QUFBQSxFQUd2QyxZQUFZQSxNQUFVLGFBQXFCO0FBQzFDLFVBQU1BLElBQUc7QUFDVCxTQUFLLGNBQWM7QUFBQSxFQUNwQjtBQUFBLEVBRUEsU0FBUztBQUNSLFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxRQUFRLEtBQUssV0FBVztBQUFBLEVBQ25DO0FBQUEsRUFFQSxVQUFVO0FBQ1QsVUFBTSxFQUFFLFVBQVUsSUFBSTtBQUN0QixjQUFVLE1BQU07QUFBQSxFQUNqQjtBQUNEO0FBR0EsZUFBZSxxQkFBcUIsUUFBZ0IsUUFBZ0I7QUFDbkUsUUFBTSxhQUFhLEtBQUssSUFBSSxVQUFVLG9CQUFvQiw2QkFBWTtBQUV0RSxNQUFJLENBQUMsWUFBWTtBQUNoQixZQUFRLE1BQU0sZ0NBQWdDO0FBQzlDO0FBQUEsRUFDRDtBQUVBLFFBQU0sU0FBUyxXQUFXO0FBQzFCLFFBQU0sZUFBZSxPQUFPLGFBQWE7QUFFekMsTUFBSSxDQUFDLGNBQWM7QUFDbEIsWUFBUSxNQUFNLHNFQUFzRTtBQUNwRjtBQUFBLEVBQ0Q7QUFFQSxNQUFJLGVBQWUsYUFBYSxXQUFXLFFBQVEsa0JBQU07QUFDekQsaUJBQWUsYUFBYSxXQUFXLFFBQVEsMEJBQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLDRCQUFRLE1BQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLG9CQUFRLE1BQU07QUFFckQsU0FBTyxpQkFBaUIsWUFBWTtBQUNyQztBQUVBLFNBQVMsNkJBQTZCLGVBQXVCLFdBQTJCO0FBQ3ZGLE1BQUk7QUFDSixNQUFJLFNBQVMsZUFBZSxFQUFFLElBQUksV0FBVTtBQUMzQyxtQkFBZSxZQUFZLFNBQVMsZUFBZSxFQUFFO0FBQUEsRUFDdEQsT0FBTztBQUNOLG1CQUFlO0FBQUEsRUFDaEI7QUFFQSxTQUFPO0FBQ1I7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAib2JqIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgIk1JTExJU0VDT05EU19JTl9XRUVLIiwgImZvcm1hdHRlcnMiLCAibG9jYWxpemUiLCAieSIsICJNIiwgImQiLCAiYSIsICJoIiwgIkgiLCAibSIsICJzIiwgIlMiLCAiZGF0ZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0TG9uZyIsICJ0aW1lTG9uZ0Zvcm1hdHRlciIsICJkYXRlVGltZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0IiwgImZvcm1hdERpc3RhbmNlIiwgImZvcm1hdCIsICJmb3JtYXRSZWxhdGl2ZSIsICJvcmRpbmFsTnVtYmVyIiwgInZhbHVlQ2FsbGJhY2siLCAiZGVmYXVsdE9wdGlvbnMiLCAibG9jYWxlIiwgIm1hdGNoIiwgInBhdGgiLCAiYXBwIiwgImZpbGVOYW1lIiwgImN1cnJlbnRDb3VudCIsICJpIiwgImkiLCAiZSIsICJpIiwgIm1hdGNoIiwgImZpbGUiLCAiYXBwIl0KfQo= diff --git a/src/main.ts b/src/main.ts index 3a8489b..c79529c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -621,14 +621,16 @@ export default class gamification extends Plugin { } async increaseStreakbooster(increaseValue:number){ - this.settings.streakbooster += increaseValue + const newValue = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); + this.settings.streakbooster = newValue; await this.saveData(this.settings) console.log(`streakbooster: ${this.settings.streakbooster}`) } async decreaseStreakbooster(decreaseValue:number){ - let newValue = this.settings.streakbooster -= decreaseValue + let newValue = parseFloat((this.settings.streakbooster - decreaseValue).toFixed(1)) + this.settings.streakbooster = newValue if (newValue < 0){ newValue = 0 } From b79583c6e0329ce51c6dbef2acfc2f6dfd014642 Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 22:41:53 +0200 Subject: [PATCH 09/15] show challenge reward with active booster --- main.js | 6 +++--- src/main.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/main.js b/main.js index 5f54261..2eeee62 100644 --- a/main.js +++ b/main.js @@ -3153,9 +3153,9 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` } const progressBarEnd = nextLevelAt - newPoints; const newPointsString = "| **Level** | **" + level.level + "** |\n| Points | " + newPoints + " |\n^levelAndPoints\n```chart\ntype: bar\nlabels: [Expririence]\nseries:\n - title: points reached\n data: [" + newPoints + "]\n - title: points to earn to level up\n data: [" + progressBarEnd + "]\nxMin: " + level.points + "\nxMax: " + level.pointsNext + '\ntension: 0.2\nwidth: 40%\nlabelColors: false\nfill: false\nbeginAtZero: false\nbestFit: false\nbestFitTitle: undefined\nbestFitNumber: 0\nstacked: true\nindexAxis: y\nxTitle: "progress"\nlegend: false\n```'; - const dailyChallenge = "| **daily Notes** | *500EP* | **" + this.settings.dailyNoteCreationTask + "/2** |"; + const dailyChallenge = "| **daily Notes** | *" + pointsForDailyChallenge * (this.settings.badgeBoosterFactor + this.settings.streakbooster) + "EP* | **" + this.settings.dailyNoteCreationTask + "/2** |"; const daysLeftInWeeklyChain = 7 - this.settings.weeklyNoteCreationTask; - const weeklyChallenge = "| **weekly Notes** | *2000EP* | **" + this.settings.weeklyNoteCreationTask + "/7** |\n^weeklyNotesChallenge\n```chart\ntype: bar\nlabels: [days done in a row]\nseries:\n - title: days to do in a row\n data: [" + this.settings.weeklyNoteCreationTask + "]\n - title: points to earn to level up\n data: [" + daysLeftInWeeklyChain + ']\nxMin: 0\nxMax: 7\ntension: 0.2\nwidth: 40%\nlabelColors: false\nfill: false\nbeginAtZero: false\nbestFit: false\nbestFitTitle: undefined\nbestFitNumber: 0\nstacked: true\nindexAxis: y\nxTitle: "progress"\nlegend: false\n```'; + const weeklyChallenge = "| **weekly Notes** | *" + pointsForWeeklyChallenge * (this.settings.badgeBoosterFactor + this.settings.streakbooster) + "EP* | **" + this.settings.weeklyNoteCreationTask + "/7** |\n^weeklyNotesChallenge\n```chart\ntype: bar\nlabels: [days done in a row]\nseries:\n - title: days to do in a row\n data: [" + this.settings.weeklyNoteCreationTask + "]\n - title: points to earn to level up\n data: [" + daysLeftInWeeklyChain + ']\nxMin: 0\nxMax: 7\ntension: 0.2\nwidth: 40%\nlabelColors: false\nfill: false\nbeginAtZero: false\nbestFit: false\nbestFitTitle: undefined\nbestFitNumber: 0\nstacked: true\nindexAxis: y\nxTitle: "progress"\nlegend: false\n```'; const boosterFactor = "| **booster factor** | **" + this.settings.streakbooster + "** |"; if (reference != null && reference2 != null && reference3 != null && reference4 != null) { start = reference - 2; @@ -3450,4 +3450,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJyk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpXHJcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlICogKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyKSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZWFjaGVkISAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBjcmVhdGVkLmApXHJcblx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHQvLyBkbyBub3RoaW5nXHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBub3RlIGNyZWF0aW9uIHdhcyByYXRlZCBhbHJlYWR5IHRvZGF5LmApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCkge1xyXG5cdFx0bGV0IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRpZiAoY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA8IDcpIHtcclxuXHRcdFx0Y3VycmVudFdlZWtseUNyZWF0ZWROb3RlcysrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXIpIHtcclxuXHRcdGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrIDw9IDYpIHtcclxuXHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDEpO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSAqICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcikpO1xyXG5cdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgdXBkYXRlU3RhdHVzQmFyKHN0YXR1c2JhcjogSFRNTFNwYW5FbGVtZW50KXtcclxuXHRcdGNvbnN0IGN1cnJlbnRMZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKVxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NiYXJQZXJjZW50ID0gKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzIC0gY3VycmVudExldmVsLnBvaW50cykvKGN1cnJlbnRMZXZlbC5wb2ludHNOZXh0IC0gY3VycmVudExldmVsLnBvaW50cykqMTAwO1xyXG5cdFx0Y29uc3QgY2hhck51bVByb2dyZXNzYmFyID0gMTBcclxuXHRcdGNvbnN0IGJhckxlbmd0aCA9IE1hdGgucm91bmQocHJvZ3Jlc3NiYXJQZXJjZW50IC8gY2hhck51bVByb2dyZXNzYmFyKVxyXG5cdFx0c3RhdHVzYmFyLnNldFRleHQoYFx1RDgzQ1x1REZCMnxsdmw6ICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gfCAke3RoaXMuY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyLCBiYXJMZW5ndGgpfWApXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZVByb2dyZXNzYmFyKGNoYXJOdW1Qcm9ncmVzc2JhcjogbnVtYmVyLCBiYXJMZW5ndGg6IG51bWJlcikge1xyXG5cdFx0bGV0IHByb2dyZXNzYmFyID0gJydcclxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDw9IGNoYXJOdW1Qcm9ncmVzc2JhcjsgaSsrKSB7XHJcblx0XHRcdGlmIChpIDw9IGJhckxlbmd0aCkge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICc9J1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICctJ1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJvZ3Jlc3NiYXI7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdFx0Y29uc29sZS5sb2coJ2xvYWRTZXR0aW5ncygpJylcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNUb0FkZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGxldCBib29zdGVyRmFjdG9yID0gMTtcclxuXHRcdGxldCBzdHJlYWtib29zdGVyID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyO1xyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSBwb2ludHNUb0FkZCAqIChib29zdGVyRmFjdG9yICsgc3RyZWFrYm9vc3RlcikgKyB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlU3RyZWFrYm9vc3RlcihpbmNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHRjb25zdCBuZXdWYWx1ZSA9IHBhcnNlRmxvYXQoKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArIGluY3JlYXNlVmFsdWUpLnRvRml4ZWQoMSkpO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3VmFsdWU7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRjb25zb2xlLmxvZyhgc3RyZWFrYm9vc3RlcjogJHt0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJ9YClcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gcGFyc2VGbG9hdCgodGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC0gZGVjcmVhc2VWYWx1ZSkudG9GaXhlZCgxKSlcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKicgKyB0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayArICcvMioqICAgfCc7XHJcblx0XHRjb25zdCBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gOiBudW1iZXIgPSA3IC0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0Y29uc3Qgd2Vla2x5Q2hhbGxlbmdlID0gJ3wgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKicgKyB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgKyAnLzcqKiAgIHxcXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW2RheXMgZG9uZSBpbiBhIHJvd11cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XFxuICAgIGRhdGE6IFsnICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgZGF5c0xlZnRJbldlZWtseUNoYWluICsgJ11cXG54TWluOiAwXFxueE1heDogN1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCc7XHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gJ3wgKipib29zdGVyIGZhY3RvcioqIHwgKionICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyICsgJyoqIHwnXHJcblxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCAmJiByZWZlcmVuY2UzICE9IG51bGwgJiYgcmVmZXJlbmNlNCAhPSBudWxsKXtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAyO1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyNDtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQzID0gcmVmZXJlbmNlMyArIDI0IC0yNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDQgPSByZWZlcmVuY2U0IC0gMSAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgNTUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDQgPSByZWZlcmVuY2U0IC0gMjUgOyAvLyBubyBpZGVhIHdieSBvZmZzZXQgNTUgaXMgbmVlZGVkXHJcblx0XHRcdFxyXG5cclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdQb2ludHNTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgZGFpbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMzID0gWy4uLm5ld0xpbmVzMi5zbGljZSgwLCBzdGFydDMpLCB3ZWVrbHlDaGFsbGVuZ2UsIC4uLm5ld0xpbmVzMi5zbGljZShlbmQzKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzNCA9IFsuLi5uZXdMaW5lczMuc2xpY2UoMCwgc3RhcnQ0KSwgYm9vc3RlckZhY3RvciwgLi4ubmV3TGluZXMzLnNsaWNlKGVuZDQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczQuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVjZWl2ZUJhZGdlXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZ2l2ZUJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBiYWRnZS5sZXZlbCArIFwiOiAqXCIgKyBiYWRnZS5uYW1lICsgXCIqXCIpe1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAxO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiArIDI7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKiBcIiArIGJhZGdlLmxldmVsICsgXCJcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV1cclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczIuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZUluaXRCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCApe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHJlbW92ZUJhZGdlc1doZW5Jbml0TGV2ZWxIaWdoZXIoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgbGV2ZWw6IG51bWJlcil7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIG91dHN0YW5kaW5nXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiA9PSBudWxsKXtcclxuXHRcdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHJcblx0XHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBsZXZlbCkge1xyXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHJlZmVyZW5jZSArIDEpLCAuLi5saW5lcy5zbGljZShyZWZlcmVuY2UyKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgY3JlYXRlQ2hhcnQodmF1bHQ6IFZhdWx0KTogUHJvbWlzZTxzdHJpbmc+e1xyXG5cdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBlYXJsaWVzdEZpbGUgPSBmaW5kRWFybGllc3RNb2RpZmllZEZpbGUoZmlsZXMpXHJcblx0XHQvL2xldCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZVxyXG5cdFx0Ly9pZiAoZWFybGllc3RGaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdEZpbGUuc3RhdC5jdGltZSApe1xyXG5cdFx0Y29uc3QgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQubXRpbWVcclxuXHRcdC8vfVxyXG5cclxuXHRcdGxldCBtb250aENvdW50ZXIgPSAwIC8vZm9ybWF0KG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksICdNTScpO1xyXG5cdFx0bGV0IGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0Ly9jb25zdCBmaWxlRGF0ZU1vbnRoTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IGZpbGVEYXRlTW9udGhNYXBNb2QgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgbW9udGhjb3VudCA9IG1vbnRoc0JldHdlZW4obmV3IERhdGUoZWFybGllc3REYXRlKSwgbmV3IERhdGUoKSlcclxuXHRcdGxldCBkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdGxldCB5TGFiZWwgPSBcIlwiXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgY3JlYXRlZFxyXG5cdFx0Lyp3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9Ki9cclxuXHJcblx0XHRtb250aENvdW50ZXIgPSAwXHJcblx0XHRkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIG1vZGlmaWVkXHJcblx0XHR3aGlsZSAobW9udGhDb3VudGVyIDwgbW9udGhjb3VudCl7XHJcblx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBkYXRlU3RyaW5nOiAke2RhdGVTdHJpbmd9YClcclxuXHRcdFx0eUxhYmVsID0geUxhYmVsICsgZGF0ZVN0cmluZyArIFwiLCBcIlxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH1cclxuXHRcdHlMYWJlbCA9IHlMYWJlbC5zbGljZSgwLHlMYWJlbC5sZW5ndGgtMilcclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHQvKmNvbnN0IGNyZWF0aW9uRGF0ZXMgPSBnZXRDcmVhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjcmVhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH0qL1xyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IG1vZCBmaWxlcyBpbiBlYWNoIG1vbnRoXHJcblx0XHRjb25zdCBtb2RpZmljYXRpb25EYXRlcyA9IGdldE1vZGlmaWNhdGlvbkRhdGVzKGZpbGVzKVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtb2RpZmljYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5JykpKzEpXHJcblx0XHRcdGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcE1vZC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIGNyZWF0ZWRcclxuXHRcdC8qbGV0IGNoYXJTdHJpbmdDcmVhdGVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXApIHtcclxuXHRcdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkLnNsaWNlKDAsY2hhclN0cmluZ0NyZWF0ZWQubGVuZ3RoLTIpKi9cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgbW9kaWZpZWRcclxuXHRcdGxldCBjaGFyU3RyaW5nTW9kaWZpZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcE1vZCkge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBrZXk6ICR7a2V5fSwgdmFsdWU6ICR7dmFsdWV9YCk7XHJcblx0XHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZCArIHZhbHVlICsgXCIsIFwiXHJcblx0XHR9XHJcblx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQuc2xpY2UoMCxjaGFyU3RyaW5nTW9kaWZpZWQubGVuZ3RoLTIpXHJcblxyXG5cdFx0cmV0dXJuIGNyZWF0ZUNoYXJ0Rm9ybWF0KHlMYWJlbCwgY2hhclN0cmluZ01vZGlmaWVkLCB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBkZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWw6IFByb21pc2U8Ym9vbGVhbj4pe1xyXG5cdFx0bmV3TGV2ZWwudGhlbigocmVzdWx0OiBib29sZWFuKT0+IHtcclxuXHRcdFx0aWYocmVzdWx0KXtcclxuXHRcdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbCh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsLCBmYWxzZSlcclxuXHRcdFx0XHRuZXcgTm90aWNlKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coYGJhZGdlIGZvciBsZXZlbCAke3RoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWx9IGlzICR7YmFkZ2UubmFtZX0gLSAke2JhZGdlLmxldmVsfWApXHJcblx0XHRcdFx0dGhpcy5naXZlQmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgYmFkZ2UpXHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gMTtcclxuXHRcdFx0XHR0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlbW92ZUtleXNGcm9tRnJvbnRtYXR0ZXIoKSB7XHJcblx0XHQvL2NvbnN0IHsgVmF1bHQsIFRGaWxlIH0gPSB3aW5kb3cuYXBwO1xyXG5cdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHBcclxuXHRcdC8vY29uc3QgdmF1bHQgPSBWYXVsdC5yZW9wZW4oKTtcclxuXHJcblx0XHQvLyBHZXQgYWxsIE1hcmtkb3duIGZpbGVzIGluIHRoZSB2YXVsdFxyXG5cdFx0Ly9jb25zdCBtYXJrZG93bkZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZmlsZUNvdW50TWFwID0gYXdhaXQgZ2V0RmlsZUNvdW50TWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Zm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlQ291bnRNYXAua2V5cygpKSB7XHJcblx0XHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0RmlsZXMoKTtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IGZpbGVzLmZpbmQoZmlsZSA9PiBmaWxlLmJhc2VuYW1lID09PSBmaWxlTmFtZSk7XHJcblx0XHRcdGlmICghZmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGVOYW1lfSBub3QgZm91bmQuYCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9jb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBuZXcgTm90aWNlKGBSZW1vdmVkIHNwZWNpZmllZCBrZXlzIGZyb20gZnJvbnRtYXR0ZXIgZnJvbSBmaWxlIFxcXCIke2ZpbGVOYW1lfVxcXCIuYCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyB3aGljaExldmVsTmV4dEJhZGdlKGN1cnJlbnRMZXZlbDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+e1xyXG5cdFx0bGV0IG5leHRCYWRnZUxldmVsID0gMFxyXG5cdFx0Zm9yIChsZXQgaSA9IGN1cnJlbnRMZXZlbDsgaSA8IDExMDsgaSsrKXtcclxuXHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoaSwgdHJ1ZSlcclxuXHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHQvLyBFeHRyYWN0IHRoZSBsZXZlbCBudW1iZXIgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG5cdFx0XHRjb25zdCBtYXRjaCA9IGJhZGdlLmxldmVsLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxOdW1iZXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOyAvLyBDb252ZXJ0IHRoZSBtYXRjaGVkIG51bWJlciB0byBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gY3VycmVudExldmVsICYmIG5leHRCYWRnZUxldmVsID09IDAgKSB7XHJcblx0XHRcdFx0XHRuZXh0QmFkZ2VMZXZlbCA9IGxldmVsTnVtYmVyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5leHRCYWRnZUxldmVsXHJcblx0fVxyXG5cclxuXHRhc3luYyBib29zdGVyRm9ySW5pdCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cdFx0Y29uc3QgbmV4dEJhZGdlQXQgPSBhd2FpdCB0aGlzLndoaWNoTGV2ZWxOZXh0QmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbClcclxuXHRcdGNvbnN0IHN0YXR1c1BvaW50c1RvUmVhY2ggPSBzdGF0dXNQb2ludHNGb3JMZXZlbChuZXh0QmFkZ2VBdClcclxuXHRcdC8vY29uc29sZS5sb2coYHN0YXR1c1BvaW50c1RvUmVhY2ggZm9yIG5leHQgQmFkZ2U6ICR7c3RhdHVzUG9pbnRzVG9SZWFjaH1gKVxyXG5cdFx0Ly8gNTAgTm90ZXMgZnJvbSBMZXZlbCAxIHRvIDUgdG8gZ2V0IHRoZSBmaXJzdCBiYWRnZS5cclxuXHRcdC8vIDMwMCBQb2ludHMgaW4gYXZlcmFnZSBmb3IgYSBOb3RlLlxyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9IE1hdGgucm91bmQoKHN0YXR1c1BvaW50c1RvUmVhY2ggLSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cykvNTAvMzAwKTtcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yID0gYm9vc3RlckZhY3RvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IHRydWVcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdC8vY29uc29sZS5sb2coYGJvb3N0ZXJGYWt0b3I6ICR7Ym9vc3RlckZhY3Rvcn1gKVxyXG5cdFx0cmV0dXJuIGJvb3N0ZXJGYWN0b3JcclxuXHR9XHJcblxyXG5cdGFzeW5jIG9wZW5BdmF0YXJGaWxlKCkge1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHt0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSl7XHJcblx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpPy5wYXRoIHx8ICcnO1xyXG5cdFx0XHRhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChleGlzdGluZ0ZpbGUucGF0aCwgc291cmNlUGF0aCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIkZpbGUgbm90IGZvdW5kIG9yIHVuYWJsZSB0byBvcGVuLlwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaXNTYW1lRGF5KGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3QgY3VycmVudERhdGUgPSB3aW5kb3cubW9tZW50KCk7IC8vIEdldCB0aGUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGN1cnJlbnREYXRlLmlzU2FtZShpbnB1dERhdGUsICdkYXknKTsgLy8gQ2hlY2sgaWYgdGhleSBhcmUgdGhlIHNhbWUgZGF5XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzT25lRGF5QmVmb3JlKGlucHV0RGF0ZTogTW9tZW50KTogYm9vbGVhbiB7XHJcblx0Y29uc3Qgb25lRGF5QmVmb3JlQ3VycmVudCA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5Jyk7IC8vIENhbGN1bGF0ZSBvbmUgZGF5IGJlZm9yZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gaW5wdXREYXRlLmlzU2FtZShvbmVEYXlCZWZvcmVDdXJyZW50LCAnZGF5Jyk7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUF2YXRhckZpbGUoYXBwOiBBcHAsIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHQvL3NldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHQvLyBEZWZpbmUgdGhlIGZpbGUgbmFtZSBhbmQgY29udGVudFxyXG5cdC8vY29uc3QgZmlsZU5hbWUgPSAnQXZhdGFyIC0gR2FtaWZpY2F0aW9uJzsgLy8gdGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZTtcclxuXHQvL2NvbnNvbGUubG9nKGBmaWxlTmFtZTogJHtmaWxlTmFtZX1gKVxyXG5cclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2ZpbGVOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHtmaWxlTmFtZX0ubWQgYWxyZWFkeSBleGlzdHNgKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblx0Ly8gQ3JlYXRlIHRoZSBmaWxlIGluIHRoZSByb290IG9mIHRoZSB2YXVsdFxyXG5cdGF3YWl0IGFwcC52YXVsdC5jcmVhdGUoYCR7ZmlsZU5hbWV9Lm1kYCwgYXZhdGFySW5pdENvbnRlbnQpO1xyXG5cclxufVxyXG5cclxuXHJcbmNsYXNzIE1vZGFsSW5mb3JtYXRpb25ib3ggZXh0ZW5kcyBNb2RhbCB7XHJcblx0cHJpdmF0ZSByZWFkb25seSBkaXNwbGF5VGV4dDogc3RyaW5nOyAvLyBTdG9yZSB0aGUgdGV4dCB0byBiZSBkaXNwbGF5ZWRcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIGRpc3BsYXlUZXh0OiBzdHJpbmcpIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0XHR0aGlzLmRpc3BsYXlUZXh0ID0gZGlzcGxheVRleHQ7IC8vIFN0b3JlIHRoZSBwYXNzZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25PcGVuKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuc2V0VGV4dCh0aGlzLmRpc3BsYXlUZXh0KTsgLy8gVXNlIHRoZSBzdG9yZWQgdGV4dFxyXG5cdH1cclxuXHJcblx0b25DbG9zZSgpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUZvcm1hdFN0cmluZ3MobGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKSB7XHJcblx0Y29uc3QgYWN0aXZlVmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XHJcblxyXG5cdGlmICghYWN0aXZlVmlldykge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIGFjdGl2ZSBNYXJrZG93biB2aWV3IGZvdW5kLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGNvbnN0IGVkaXRvciA9IGFjdGl2ZVZpZXcuZWRpdG9yO1xyXG5cdGNvbnN0IHNlbGVjdGVkVGV4dCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHJcblx0aWYgKCFzZWxlY3RlZFRleHQpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyB0ZXh0IHNlbGVjdGVkIChmb3IgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzd2l0Y2ggTGF5ZXIgMiAmIDMpLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGxldCByZXBsYWNlZFRleHQgPSBzZWxlY3RlZFRleHQucmVwbGFjZUFsbChsYXllcjIsIFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIpO1xyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKGxheWVyMywgXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiLCBsYXllcjIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIiwgbGF5ZXIzKVxyXG5cclxuXHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihyZXBsYWNlZFRleHQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGxldCByYXRpbmdGYWt0b3I6IG51bWJlclxyXG5cdGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gcmF0aW5nTmV3IC0gcGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZ0Zha3RvciA9IDBcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdGYWt0b3JcclxufVxyXG5cclxuXHJcblxyXG4gIFxyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuIiwgImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCBnYW1pZmljYXRpb24gZnJvbSAnLi9tYWluJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogUGFydGlhbDxJU2V0dGluZ3M+ID0ge1xuICBlbmFibGVJbml0Q29tbWFuZDogdHJ1ZSxcbiAgYmluZEVudGVyOiB0cnVlLFxuICBiaW5kVGFiOiB0cnVlLFxuICBhdmF0YXJQYWdlTmFtZTogJ0F2YXRhciAtIEdhbWlmaWNhdGlvbicsXG4gIHRhZ3NFeGNsdWRlOiAnJyxcbiAgZm9sZGVyRXhjbHVkZTogJ0V4Y2FsaWRyYXcnLFxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogJz09JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6ICcqKicsXG4gIG51bUFsbEZpbGVzOiAxLFxuICBudW1BbGxGaWxlc0NvdW50OiAwLFxuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiAwLFxuICBzdGF0dXNQb2ludHM6IDAsXG4gIHN0YXR1c0xldmVsOiAxLFxuICB4cEZvck5leHRMZXZlbDogMTAwMCxcbiAgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiAnMTIuMDguMjAyMycsXG4gIGJhZGdlQm9vc3RlclN0YXRlOiBmYWxzZSxcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiAxLFxuICBkZWJ1ZzogZmFsc2UsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogMCxcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6ICcxMi4wOC4yMDIzJyxcbiAgc3RyZWFrYm9vc3RlcjogMCxcbiAgc3RyZWFrYm9vc3RlckRhdGU6ICcxMi4wOC4yMDIzJyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBzdHJpbmc7XG59XG5cblxuZXhwb3J0IGNsYXNzIEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBnYW1pZmljYXRpb247XG4gIFxuICBwdWJsaWMgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIHB1YmxpYyBiaW5kVGFiOiBib29sZWFuO1xuICBwdWJsaWMgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBmb2xkZXJFeGNsdWRlOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgcHVibGljIG51bUFsbEZpbGVzOiBudW1iZXI7XG4gIHB1YmxpYyBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIHB1YmxpYyBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNQb2ludHM6IG51bWJlcjtcbiAgcHVibGljIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHB1YmxpYyB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgZ2FtaWZpY2F0aW9uU3RhcnREYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgcHVibGljIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBwdWJsaWMgZGVidWc6IGJvb2xlYW47XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyO1xuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuICBwdWJsaWMgc3RyZWFrYm9vc3RlckRhdGU6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBnYW1pZmljYXRpb24pIHtcblx0ICBzdXBlcihhcHAsIHBsdWdpbik7XG5cdCAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cbiAgXG5cdHB1YmxpYyBkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Y29udGFpbmVyRWwuYWRkQ2xhc3MoXCJleGNhbGlkcmF3LXNldHRpbmdzXCIpO1xuXHRcdHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcblxuXHRcdGNvbnN0IGNvZmZlZURpdiA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdihcImNvZmZlZVwiKTtcblx0XHRjb2ZmZWVEaXYuYWRkQ2xhc3MoXCJleC1jb2ZmZWUtZGl2XCIpO1xuXHRcdGNvbnN0IGNvZmZlZUxpbmsgPSBjb2ZmZWVEaXYuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRocmVmOiBcImh0dHBzOi8va28tZmkuY29tL2FuZHJlYXN0cmViaW5nXCIsXG5cdFx0fSk7XG5cdFx0Y29uc3QgY29mZmVlSW1nID0gY29mZmVlTGluay5jcmVhdGVFbChcImltZ1wiLCB7XG5cdFx0YXR0cjoge1xuXHRcdFx0c3JjOiBcImh0dHBzOi8vY2RuLmtvLWZpLmNvbS9jZG4va29maTMucG5nP3Y9M1wiLFxuXHRcdH0sXG5cdFx0fSk7XG5cdFx0Y29mZmVlSW1nLmhlaWdodCA9IDQ1O1xuXG5cdFx0Ly9jb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXHRcdC8vY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgXG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnR2FtaWZ5IHlvdXIgUEtNIC0gU2V0dGluZ3MnIH0pO1xuXHRcdGNvbnNvbGUubG9nKCdzZXR0aW5ncyBjYWxsZWQnKVxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJyN0YWdzIHRvIGlnbm9yZScpXG5cdFx0XHQuc2V0RGVzYygnZW50ZXIgdGFncyB3aXRob3V0ICMgYW5kIHNlcGFyYXRlIHdpdGggXCIsIFwiLlxcbkluY2x1ZGUgbmVzdGVkIHRhZ3MuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgdGFnMSwgdGFnMi9zdWJ0YWcsIFx1MjAyNicpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdFx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdmb2xkZXIgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciBmb2xkZXIgd2hpY2hzIGNvbnRlbnQgc2hhbGwgYmUgaWdub3JlZC4gU2VwYXJhdGUgd2l0aCBcIiwgXCIuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgZm9sZGVyMSwgZm9sZGVyMiwgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9maWxlIFBhZ2UgTmFtZScpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2UgaGVyZSB0aGUgbmFtZSBvZiB5b3VyIHByb2ZpbGUgcGFnZSBpZiB5b3UgbGlrZS4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCduYW1lJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cdFx0XHRcdFxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ090aGVyIFNldHRpbmdzJyB9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdEaXNhYmxlIEluaXQgQ29tbWFuZCcpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiByZW1vdmUgdGhlIGluaXQgY29tbWFuZCBmcm9tIGNvbW1hbmQgcHJvbXB0IGJ5IHN3aXRjaGluZyBvZmYuXFxucmVzdGFydCBuZWVkZWQuJylcblx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4gXG5cdFx0XHRcdHRvZ2dsZVxuICAgICAgICAgIFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpXG4gICAgICAgIFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kID0gdmFsdWU7XG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgXHRcdFx0fSksXG5cdFx0XHQpO1xuXG5cdFx0XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnbGltaXQgdGhlIHZpc2libGUgbW9udGggaW4gdGhlIGNoYXJ0IG9uIHlvdXIgYXZhdGFyIHBhZ2U6ICcgKyB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdC5zZXREZXNjKCdpZiAwLCBhbGwgbW9udGggd2lsbCBiZSBzaG93bi4gRW50ZXIgYSBudW1iZXIgaG93IG1hbnkgbW9udGggc2hhbGwgYmUgc2hvd24uJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTnVtYmVyIG9mIE1vbnRoIHRvIHNob3cnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlLnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cbiAgXG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdQcm9ncmVzc2l2ZSBTdW1tYXJpemF0aW9uJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSB3aGljaCBmb3JtYXR0aW5nIHlvdSB1c2UgZm9yIExheWVyIDIgYW5kIDMuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMiBpcyB1c3VhbGx5ICoqJylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSlcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMyBpcyB1c3VhbGx5ID09Jylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0fSkpO1xuXG5cdH1cbiAgfSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1aXJlZEFyZ3MocmVxdWlyZWQsIGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgcmVxdWlyZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHJlcXVpcmVkICsgJyBhcmd1bWVudCcgKyAocmVxdWlyZWQgPiAxID8gJ3MnIDogJycpICsgJyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3MubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgZGF0ZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZShOYU4pKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBzb21lIHZhbHVlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKCcyMDE0LTAyLTMxJylcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIG9iamVjdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSh7fSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTtcblxuICAvLyBDbG9uZSB0aGUgZGF0ZVxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YoYXJndW1lbnQpID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjc3RyaW5nLWFyZ3VtZW50c1wiKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufSIsICJpbXBvcnQgaXNEYXRlIGZyb20gXCIuLi9pc0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNWYWxpZFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB2YWxpZD9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgZmFsc2UgaWYgYXJndW1lbnQgaXMgSW52YWxpZCBEYXRlIGFuZCB0cnVlIG90aGVyd2lzZS5cbiAqIEFyZ3VtZW50IGlzIGNvbnZlcnRlZCB0byBEYXRlIHVzaW5nIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBJbnZhbGlkIERhdGUgaXMgYSBEYXRlLCB3aG9zZSB0aW1lIHZhbHVlIGlzIE5hTi5cbiAqXG4gKiBUaW1lIHZhbHVlIG9mIERhdGU6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuOS4xLjFcbiAqXG4gKiBAcGFyYW0geyp9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlIGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgyMDE0LCAxLCAzMSkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWx1ZSwgY29udmVydGFibGUgaW50byBhIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKDEzOTM4MDQ4MDAwMDApXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKCcnKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNWYWxpZChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIGlmICghaXNEYXRlKGRpcnR5RGF0ZSkgJiYgdHlwZW9mIGRpcnR5RGF0ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgcmV0dXJuICFpc05hTihOdW1iZXIoZGF0ZSkpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufSIsICJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdGltZXN0YW1wID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59IiwgImltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSBcIi4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9EQVkgPSA4NjQwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0RheU9mWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZZZWFyVGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIHZhciBkaWZmZXJlbmNlID0gdGltZXN0YW1wIC0gc3RhcnRPZlllYXJUaW1lc3RhbXA7XG4gIHJldHVybiBNYXRoLmZsb29yKGRpZmZlcmVuY2UgLyBNSUxMSVNFQ09ORFNfSU5fREFZKSArIDE7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSAxO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgeWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSk7XG4gIHZhciBmb3VydGhPZkphbnVhcnkgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5KTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENJU09XZWVrKGRhdGUpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkYXRlKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgInZhciBkZWZhdWx0T3B0aW9ucyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykge1xuICBkZWZhdWx0T3B0aW9ucyA9IG5ld09wdGlvbnM7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8ud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZmlyc3RXZWVrT2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWtPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mVGhpc1llYXIsIG9wdGlvbnMpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuICB2YXIgeWVhciA9IGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWsgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vlay5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWssIG9wdGlvbnMpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ1dlZWsoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlciwgdGFyZ2V0TGVuZ3RoKSB7XG4gIHZhciBzaWduID0gbnVtYmVyIDwgMCA/ICctJyA6ICcnO1xuICB2YXIgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpO1xuICB3aGlsZSAob3V0cHV0Lmxlbmd0aCA8IHRhcmdldExlbmd0aCkge1xuICAgIG91dHB1dCA9ICcwJyArIG91dHB1dDtcbiAgfVxuICByZXR1cm4gc2lnbiArIG91dHB1dDtcbn0iLCAiaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqL1xudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuXG4gICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09ICd5eScgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbikge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICByZXR1cm4gdG9rZW4gPT09ICdNJyA/IFN0cmluZyhtb250aCArIDEpIDogYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENEYXRlKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRVVENIb3VycygpIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlWzBdO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSAnYW0nID8gJ2EubS4nIDogJ3AubS4nO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDTWludXRlcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgIHZhciBmcmFjdGlvbmFsU2Vjb25kcyA9IE1hdGguZmxvb3IobWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMykpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZnJhY3Rpb25hbFNlY29uZHMsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJpbXBvcnQgZ2V0VVRDRGF5T2ZZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0RheU9mWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuaW1wb3J0IGxpZ2h0Rm9ybWF0dGVycyBmcm9tIFwiLi4vbGlnaHRGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG52YXIgZGF5UGVyaW9kRW51bSA9IHtcbiAgYW06ICdhbScsXG4gIHBtOiAncG0nLFxuICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgbm9vbjogJ25vb24nLFxuICBtb3JuaW5nOiAnbW9ybmluZycsXG4gIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgbmlnaHQ6ICduaWdodCdcbn07XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCBNaWxsaXNlY29uZHMgaW4gZGF5ICAgICAgICAgICAgfFxuICogfCAgYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgfCAgQiAgfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgfFxuICogfCAgYyAgfCBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlayAgfCAgQyogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZSAgfCBMb2NhbCBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgfCAgRSAgfCBEYXkgb2Ygd2VlayAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRiogfCBEYXkgb2Ygd2VlayBpbiBtb250aCAgICAgICAgICAgfFxuICogfCAgZyogfCBNb2RpZmllZCBKdWxpYW4gZGF5ICAgICAgICAgICAgfCAgRyAgfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaSEgfCBJU08gZGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgfCAgSSEgfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgfFxuICogfCAgaiogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfCAgSiogfCBMb2NhbGl6ZWQgaG91ciB3L28gZGF5IHBlcmlvZCAgfFxuICogfCAgayAgfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgfCAgSyAgfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbCogfCAoZGVwcmVjYXRlZCkgICAgICAgICAgICAgICAgICAgfCAgTCAgfCBTdGFuZC1hbG9uZSBtb250aCAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbyEgfCBPcmRpbmFsIG51bWJlciBtb2RpZmllciAgICAgICAgfCAgTyAgfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgfFxuICogfCAgcCEgfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgfCAgUCEgfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgfFxuICogfCAgcSAgfCBTdGFuZC1hbG9uZSBxdWFydGVyICAgICAgICAgICAgfCAgUSAgfCBRdWFydGVyICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgciogfCBSZWxhdGVkIEdyZWdvcmlhbiB5ZWFyICAgICAgICAgfCAgUiEgfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgdCEgfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgfCAgVCEgfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgfFxuICogfCAgdSAgfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgfCAgVSogfCBDeWNsaWMgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgdiogfCBUaW1lem9uZSAoZ2VuZXJpYyBub24tbG9jYXQuKSAgfCAgViogfCBUaW1lem9uZSAobG9jYXRpb24pICAgICAgICAgICAgfFxuICogfCAgdyAgfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgfCAgVyogfCBXZWVrIG9mIG1vbnRoICAgICAgICAgICAgICAgICAgfFxuICogfCAgeCAgfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgfCAgWCAgfCBUaW1lem9uZSAoSVNPLTg2MDEpICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgfFxuICogfCAgeiAgfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgfCAgWiogfCBUaW1lem9uZSAoYWxpYXNlcykgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAhIGFyZSBub24tc3RhbmRhcmQsIGJ1dCBpbXBsZW1lbnRlZCBieSBkYXRlLWZuczpcbiAqIC0gYG9gIG1vZGlmaWVzIHRoZSBwcmV2aW91cyB0b2tlbiB0byB0dXJuIGl0IGludG8gYW4gb3JkaW5hbCAoc2VlIGBmb3JtYXRgIGRvY3MpXG4gKiAtIGBpYCBpcyBJU08gZGF5IG9mIHdlZWsuIEZvciBgaWAgYW5kIGBpaWAgaXMgcmV0dXJucyBudW1lcmljIElTTyB3ZWVrIGRheXMsXG4gKiAgIGkuZS4gNyBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAqIC0gYElgIGlzIElTTyB3ZWVrIG9mIHllYXIsIGFzIG9wcG9zZWQgdG8gYHdgIHdoaWNoIGlzIGxvY2FsIHdlZWsgb2YgeWVhci5cbiAqIC0gYFJgIGlzIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLCBhcyBvcHBvc2VkIHRvIGBZYCB3aGljaCBpcyBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogICBgUmAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJYCBhbmQgYGlgXG4gKiAgIGZvciB1bml2ZXJzYWwgSVNPIHdlZWstbnVtYmVyaW5nIGRhdGUsIHdoZXJlYXNcbiAqICAgYFlgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgd2AgYW5kIGBlYFxuICogICBmb3Igd2Vlay1udW1iZXJpbmcgZGF0ZSBzcGVjaWZpYyB0byB0aGUgbG9jYWxlLlxuICogLSBgUGAgaXMgbG9uZyBsb2NhbGl6ZWQgZGF0ZSBmb3JtYXRcbiAqIC0gYHBgIGlzIGxvbmcgbG9jYWxpemVkIHRpbWUgZm9ybWF0XG4gKi9cblxudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIEVyYVxuICBHOiBmdW5jdGlvbiBHKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBlcmEgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgPiAwID8gMSA6IDA7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gQUQsIEJDXG4gICAgICBjYXNlICdHJzpcbiAgICAgIGNhc2UgJ0dHJzpcbiAgICAgIGNhc2UgJ0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBBLCBCXG4gICAgICBjYXNlICdHR0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcbiAgICAgIGNhc2UgJ0dHR0cnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAneW8nKSB7XG4gICAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoeWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnkoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFk6IGZ1bmN0aW9uIFkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHNpZ25lZFdlZWtZZWFyID0gZ2V0VVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgd2Vla1llYXIgPSBzaWduZWRXZWVrWWVhciA+IDAgPyBzaWduZWRXZWVrWWVhciA6IDEgLSBzaWduZWRXZWVrWWVhcjtcblxuICAgIC8vIFR3byBkaWdpdCB5ZWFyXG4gICAgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgICB2YXIgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7XG4gICAgfVxuXG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICdZbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIFIoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgaXNvV2Vla1llYXIgPSBnZXRVVENJU09XZWVrWWVhcihkYXRlKTtcblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBFeHRlbmRlZCB5ZWFyLiBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZyB0aGUgeWVhciBvZiB0aGlzIGNhbGVuZGFyIHN5c3RlbS5cbiAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIGxvY2FsaXplcnMgYXJlIEIuQy4geWVhcnM6XG4gIC8vIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gIC8vIHwtLS0tLS18LS0tLS18LS0tLS18XG4gIC8vIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gIC8vIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gIC8vIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gIC8vIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAgLy8gd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkLlxuICB1OiBmdW5jdGlvbiB1KGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBRdWFydGVyXG4gIFE6IGZ1bmN0aW9uIFEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAnUSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAnUVEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdRbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAnUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAnUVFRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdRUVFRJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcTogZnVuY3Rpb24gcShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdxJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdxcSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ3FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdxcXFxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ3FxcXEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnTSc6XG4gICAgICBjYXNlICdNTSc6XG4gICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdNbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ01NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTU1NTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ01NTU0nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbiBMKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhtb250aCArIDEpO1xuICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMTCc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ0xvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdMTExMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTExMTCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIHdlZWsgb2YgeWVhclxuICB3OiBmdW5jdGlvbiB3KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciB3ZWVrID0gZ2V0VVRDV2VlayhkYXRlLCBvcHRpb25zKTtcbiAgICBpZiAodG9rZW4gPT09ICd3bycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIEkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGlzb1dlZWsgPSBnZXRVVENJU09XZWVrKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvV2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdkbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDRGF0ZSgpLCB7XG4gICAgICAgIHVuaXQ6ICdkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IGZ1bmN0aW9uIEQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mWWVhciA9IGdldFVUQ0RheU9mWWVhcihkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdEbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwge1xuICAgICAgICB1bml0OiAnZGF5T2ZZZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF5T2ZZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2Ygd2Vla1xuICBFOiBmdW5jdGlvbiBFKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnRSc6XG4gICAgICBjYXNlICdFRSc6XG4gICAgICBjYXNlICdFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ0VFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ0VFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnRUVFRSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgZGF5IG9mIHdlZWtcbiAgZTogZnVuY3Rpb24gZShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbilcbiAgICAgIGNhc2UgJ2UnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2VlJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2VvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2VlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnZWVlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdlZWVlJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiBmdW5jdGlvbiBjKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoc2FtZSBhcyBpbiBgZWApXG4gICAgICBjYXNlICdjJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2NvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnY2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdjY2NjJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBJU08gZGF5IG9mIHdlZWtcbiAgaTogZnVuY3Rpb24gaShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgaXNvRGF5T2ZXZWVrID0gZGF5T2ZXZWVrID09PSAwID8gNyA6IGRheU9mV2VlaztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAyXG4gICAgICBjYXNlICdpJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcbiAgICAgIGNhc2UgJ2lpJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29EYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAybmRcbiAgICAgIGNhc2UgJ2lvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ2lpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnaWlpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdpaWlpJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0sIFBNLCBtaWRuaWdodCwgbm9vblxuICBiOiBmdW5jdGlvbiBiKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA9PT0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYic6XG4gICAgICBjYXNlICdiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2JiYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiYic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiBCKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA+PSAxNykge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ldmVuaW5nO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uYWZ0ZXJub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gNCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5tb3JuaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5pZ2h0O1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdCJzpcbiAgICAgIGNhc2UgJ0JCJzpcbiAgICAgIGNhc2UgJ0JCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2hvJykge1xuICAgICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMTI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ0hvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENIb3VycygpLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIEsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgaWYgKHRva2VuID09PSAnS28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFsxLTI0XVxuICBrOiBmdW5jdGlvbiBrKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7XG4gICAgaWYgKHRva2VuID09PSAna28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdtbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDTWludXRlcygpLCB7XG4gICAgICAgIHVuaXQ6ICdtaW51dGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5tKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnc28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ1NlY29uZHMoKSwge1xuICAgICAgICB1bml0OiAnc2Vjb25kJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5TKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGFsd2F5cyBgJ1onYClcbiAgWDogZnVuY3Rpb24gWChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuICdaJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ1gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgXG4gICAgICBjYXNlICdYWFhYJzpcbiAgICAgIGNhc2UgJ1hYJzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGBcbiAgICAgIGNhc2UgJ1hYWFhYJzpcbiAgICAgIGNhc2UgJ1hYWCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgeDogZnVuY3Rpb24geChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICd4JzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuICAgICAgY2FzZSAneHh4eCc6XG4gICAgICBjYXNlICd4eCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG4gICAgICBjYXNlICd4eHh4eCc6XG4gICAgICBjYXNlICd4eHgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChHTVQpXG4gIE86IGZ1bmN0aW9uIE8oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAnTyc6XG4gICAgICBjYXNlICdPTyc6XG4gICAgICBjYXNlICdPT08nOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnT09PTyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pXG4gIHo6IGZ1bmN0aW9uIHooZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAneic6XG4gICAgICBjYXNlICd6eic6XG4gICAgICBjYXNlICd6enonOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnenp6eic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIHQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gTWF0aC5mbG9vcihvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gVChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBvcmlnaW5hbERhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApO1xuICB2YXIgbWludXRlcyA9IGFic09mZnNldCAlIDYwO1xuICBpZiAobWludXRlcyA9PT0gMCkge1xuICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTtcbiAgfVxuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkge1xuICAgIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpO1xuICB9XG4gIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCksIDIpO1xuICB2YXIgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAidmFyIGRhdGVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIHRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gdGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAncHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHBwJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHZhciBtYXRjaFJlc3VsdCA9IHBhdHRlcm4ubWF0Y2goLyhQKykocCspPy8pIHx8IFtdO1xuICB2YXIgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgdmFyIHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07XG4gIGlmICghdGltZVBhdHRlcm4pIHtcbiAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZyk7XG4gIH1cbiAgdmFyIGRhdGVUaW1lRm9ybWF0O1xuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0LnJlcGxhY2UoJ3t7ZGF0ZX19JywgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcpKS5yZXBsYWNlKCd7e3RpbWV9fScsIHRpbWVMb25nRm9ybWF0dGVyKHRpbWVQYXR0ZXJuLCBmb3JtYXRMb25nKSk7XG59O1xudmFyIGxvbmdGb3JtYXR0ZXJzID0ge1xuICBwOiB0aW1lTG9uZ0Zvcm1hdHRlcixcbiAgUDogZGF0ZVRpbWVMb25nRm9ybWF0dGVyXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9uZ0Zvcm1hdHRlcnM7IiwgIi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkpO1xuICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIHJldHVybiBkYXRlLmdldFRpbWUoKSAtIHV0Y0RhdGUuZ2V0VGltZSgpO1xufSIsICJ2YXIgcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zID0gWydEJywgJ0REJ107XG52YXIgcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMgPSBbJ1lZJywgJ1lZWVknXTtcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgaWYgKHRva2VuID09PSAnWVlZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnRCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnREQnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9XG59IiwgInZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIHNlY29uZCcsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIHhTZWNvbmRzOiB7XG4gICAgb25lOiAnMSBzZWNvbmQnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIGhhbGZBTWludXRlOiAnaGFsZiBhIG1pbnV0ZScsXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBtaW51dGUnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICB4TWludXRlczoge1xuICAgIG9uZTogJzEgbWludXRlJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgaG91cicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhIb3Vyczoge1xuICAgIG9uZTogJzEgaG91cicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhEYXlzOiB7XG4gICAgb25lOiAnMSBkYXknLFxuICAgIG90aGVyOiAne3tjb3VudH19IGRheXMnXG4gIH0sXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB3ZWVrJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgeFdlZWtzOiB7XG4gICAgb25lOiAnMSB3ZWVrJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgYWJvdXRYTW9udGhzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBtb250aCcsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICB4TW9udGhzOiB7XG4gICAgb25lOiAnMSBtb250aCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIHhZZWFyczoge1xuICAgIG9uZTogJzEgeWVhcicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6ICdvdmVyIDEgeWVhcicsXG4gICAgb3RoZXI6ICdvdmVyIHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiAnYWxtb3N0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhbG1vc3Qge3tjb3VudH19IHllYXJzJ1xuICB9XG59O1xudmFyIGZvcm1hdERpc3RhbmNlID0gZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UodG9rZW4sIGNvdW50LCBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQ7XG4gIHZhciB0b2tlblZhbHVlID0gZm9ybWF0RGlzdGFuY2VMb2NhbGVbdG9rZW5dO1xuICBpZiAodHlwZW9mIHRva2VuVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZSgne3tjb3VudH19JywgY291bnQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gJ2luICcgKyByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAnIGFnbyc7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGlzdGFuY2U7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRm9ybWF0TG9uZ0ZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgLy8gVE9ETzogUmVtb3ZlIFN0cmluZygpXG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgIHZhciBmb3JtYXQgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkRm9ybWF0TG9uZ0ZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuL2luZGV4LmpzXCI7XG52YXIgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdFRUVFLCBNTU1NIGRvLCB5JyxcbiAgbG9uZzogJ01NTU0gZG8sIHknLFxuICBtZWRpdW06ICdNTU0gZCwgeScsXG4gIHNob3J0OiAnTU0vZGQveXl5eSdcbn07XG52YXIgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdoOm1tOnNzIGEgenp6eicsXG4gIGxvbmc6ICdoOm1tOnNzIGEgeicsXG4gIG1lZGl1bTogJ2g6bW06c3MgYScsXG4gIHNob3J0OiAnaDptbSBhJ1xufTtcbnZhciBkYXRlVGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbWVkaXVtOiAne3tkYXRlfX0sIHt7dGltZX19JyxcbiAgc2hvcnQ6ICd7e2RhdGV9fSwge3t0aW1lfX0nXG59O1xudmFyIGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdExvbmc7IiwgInZhciBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6ICdQJ1xufTtcbnZhciBmb3JtYXRSZWxhdGl2ZSA9IGZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlKHRva2VuLCBfZGF0ZSwgX2Jhc2VEYXRlLCBfb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UmVsYXRpdmVMb2NhbGVbdG9rZW5dO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFJlbGF0aXZlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZExvY2FsaXplRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRpcnR5SW5kZXgsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogJ3N0YW5kYWxvbmUnO1xuICAgIHZhciB2YWx1ZXNBcnJheTtcbiAgICBpZiAoY29udGV4dCA9PT0gJ2Zvcm1hdHRpbmcnICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciB3aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBkZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1t3aWR0aF0gfHwgYXJncy5mb3JtYXR0aW5nVmFsdWVzW2RlZmF1bHRXaWR0aF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgX3dpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1tfd2lkdGhdIHx8IGFyZ3MudmFsdWVzW19kZWZhdWx0V2lkdGhdO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2soZGlydHlJbmRleCkgOiBkaXJ0eUluZGV4O1xuICAgIC8vIEB0cy1pZ25vcmU6IEZvciBzb21lIHJlYXNvbiBUeXBlU2NyaXB0IGp1c3QgZG9uJ3Qgd2FudCB0byBtYXRjaCBpdCwgbm8gbWF0dGVyIGhvdyBoYXJkIHdlIHRyeS4gSSBjaGFsbGVuZ2UgeW91IHRvIHRyeSB0byByZW1vdmUgaXQhXG4gICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4XTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTG9jYWxpemVGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanNcIjtcbnZhciBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydCJywgJ0EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnQkMnLCAnQUQnXSxcbiAgd2lkZTogWydCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJ11cbn07XG52YXIgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbJzEnLCAnMicsICczJywgJzQnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnUTEnLCAnUTInLCAnUTMnLCAnUTQnXSxcbiAgd2lkZTogWycxc3QgcXVhcnRlcicsICcybmQgcXVhcnRlcicsICczcmQgcXVhcnRlcicsICc0dGggcXVhcnRlciddXG59O1xuXG4vLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG52YXIgbW9udGhWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydKJywgJ0YnLCAnTScsICdBJywgJ00nLCAnSicsICdKJywgJ0EnLCAnUycsICdPJywgJ04nLCAnRCddLFxuICBhYmJyZXZpYXRlZDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuICB3aWRlOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXVxufTtcbnZhciBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ10sXG4gIHNob3J0OiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXG4gIGFiYnJldmlhdGVkOiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuICB3aWRlOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J11cbn07XG52YXIgZGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH1cbn07XG52YXIgZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9XG59O1xudmFyIG9yZGluYWxOdW1iZXIgPSBmdW5jdGlvbiBvcmRpbmFsTnVtYmVyKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykge1xuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICAvLyBJZiBvcmRpbmFsIG51bWJlcnMgZGVwZW5kIG9uIGNvbnRleHQsIGZvciBleGFtcGxlLFxuICAvLyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCBncmFtbWF0aWNhbCBnZW5kZXJzLFxuICAvLyB1c2UgYG9wdGlvbnMudW5pdGAuXG4gIC8vXG4gIC8vIGB1bml0YCBjYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RhdGUnLCAnZGF5T2ZZZWFyJyxcbiAgLy8gJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLlxuXG4gIHZhciByZW0xMDAgPSBudW1iZXIgJSAxMDA7XG4gIGlmIChyZW0xMDAgPiAyMCB8fCByZW0xMDAgPCAxMCkge1xuICAgIHN3aXRjaCAocmVtMTAwICUgMTApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdzdCc7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnbmQnO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3JkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bWJlciArICd0aCc7XG59O1xudmFyIGxvY2FsaXplID0ge1xuICBvcmRpbmFsTnVtYmVyOiBvcmRpbmFsTnVtYmVyLFxuICBlcmE6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBlcmFWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IGZ1bmN0aW9uIGFyZ3VtZW50Q2FsbGJhY2socXVhcnRlcikge1xuICAgICAgcmV0dXJuIHF1YXJ0ZXIgLSAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogbW9udGhWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogJ3dpZGUnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxpemU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGg7XG4gICAgdmFyIG1hdGNoUGF0dGVybiA9IHdpZHRoICYmIGFyZ3MubWF0Y2hQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5tYXRjaFBhdHRlcm5zW2FyZ3MuZGVmYXVsdE1hdGNoV2lkdGhdO1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChtYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG4gICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkocGFyc2VQYXR0ZXJucykgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSkgOiBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59XG5mdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkgJiYgcHJlZGljYXRlKG9iamVjdFtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoUGF0dGVybkZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MubWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7XG4gICAgaWYgKCFwYXJzZVJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKHBhcnNlUmVzdWx0WzBdKSA6IHBhcnNlUmVzdWx0WzBdO1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59IiwgImltcG9ydCBidWlsZE1hdGNoRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaEZuL2luZGV4LmpzXCI7XG5pbXBvcnQgYnVpbGRNYXRjaFBhdHRlcm5GbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuL2luZGV4LmpzXCI7XG52YXIgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKHRofHN0fG5kfHJkKT8vaTtcbnZhciBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcbnZhciBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGJ8YSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGJcXC4/XFxzP2NcXC4/fGJcXC4/XFxzP2NcXC4/XFxzP2VcXC4/fGFcXC4/XFxzP2RcXC4/fGNcXC4/XFxzP2VcXC4/KS9pLFxuICB3aWRlOiAvXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2lcbn07XG52YXIgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL15iL2ksIC9eKGF8YykvaV1cbn07XG52YXIgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaVxufTtcbnZhciBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV1cbn07XG52YXIgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2lcbn07XG52YXIgcGFyc2VNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXmovaSwgL15mL2ksIC9ebS9pLCAvXmEvaSwgL15tL2ksIC9eai9pLCAvXmovaSwgL15hL2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXSxcbiAgYW55OiBbL15qYS9pLCAvXmYvaSwgL15tYXIvaSwgL15hcC9pLCAvXm1heS9pLCAvXmp1bi9pLCAvXmp1bC9pLCAvXmF1L2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXVxufTtcbnZhciBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pXG59O1xudmFyIHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXVxufTtcbnZhciBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaVxufTtcbnZhciBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL15hL2ksXG4gICAgcG06IC9ecC9pLFxuICAgIG1pZG5pZ2h0OiAvXm1pL2ksXG4gICAgbm9vbjogL15uby9pLFxuICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksXG4gICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksXG4gICAgZXZlbmluZzogL2V2ZW5pbmcvaSxcbiAgICBuaWdodDogL25pZ2h0L2lcbiAgfVxufTtcbnZhciBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKHZhbHVlKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH0pLFxuICBlcmE6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2soaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCArIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICdhbnknLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbWF0Y2g7IiwgImltcG9ydCBmb3JtYXREaXN0YW5jZSBmcm9tIFwiLi9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0TG9uZyBmcm9tIFwiLi9fbGliL2Zvcm1hdExvbmcvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRSZWxhdGl2ZSBmcm9tIFwiLi9fbGliL2Zvcm1hdFJlbGF0aXZlL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9jYWxpemUgZnJvbSBcIi4vX2xpYi9sb2NhbGl6ZS9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoIGZyb20gXCIuL19saWIvbWF0Y2gvaW5kZXguanNcIjtcbi8qKlxuICogQHR5cGUge0xvY2FsZX1cbiAqIEBjYXRlZ29yeSBMb2NhbGVzXG4gKiBAc3VtbWFyeSBFbmdsaXNoIGxvY2FsZSAoVW5pdGVkIFN0YXRlcykuXG4gKiBAbGFuZ3VhZ2UgRW5nbGlzaFxuICogQGlzby02MzktMiBlbmdcbiAqIEBhdXRob3IgU2FzaGEgS29zcyBbQGtvc3Nub2NvcnBde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9rb3Nzbm9jb3JwfVxuICogQGF1dGhvciBMZXNoYSBLb3NzIFtAbGVzaGFrb3NzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbGVzaGFrb3NzfVxuICovXG52YXIgbG9jYWxlID0ge1xuICBjb2RlOiAnZW4tVVMnLFxuICBmb3JtYXREaXN0YW5jZTogZm9ybWF0RGlzdGFuY2UsXG4gIGZvcm1hdExvbmc6IGZvcm1hdExvbmcsXG4gIGZvcm1hdFJlbGF0aXZlOiBmb3JtYXRSZWxhdGl2ZSxcbiAgbG9jYWxpemU6IGxvY2FsaXplLFxuICBtYXRjaDogbWF0Y2gsXG4gIG9wdGlvbnM6IHtcbiAgICB3ZWVrU3RhcnRzT246IDAgLyogU3VuZGF5ICovLFxuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMVxuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxlOyIsICJpbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vLi4vbG9jYWxlL2VuLVVTL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0TG9jYWxlOyIsICJpbXBvcnQgaXNWYWxpZCBmcm9tIFwiLi4vaXNWYWxpZC9pbmRleC5qc1wiO1xuaW1wb3J0IHN1Yk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9uZ0Zvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuLCBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4sIHRocm93UHJvdGVjdGVkRXJyb3IgfSBmcm9tIFwiLi4vX2xpYi9wcm90ZWN0ZWRUb2tlbnMvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qc1wiOyAvLyBUaGlzIFJlZ0V4cCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cyBzZXBhcmF0ZWQgYnkgYHxgOlxuLy8gLSBbeVlRcU1Md0lkRGVjaWhIS2ttc11vIG1hdGNoZXMgYW55IGF2YWlsYWJsZSBvcmRpbmFsIG51bWJlciB0b2tlblxuLy8gICAob25lIG9mIHRoZSBjZXJ0YWluIGxldHRlcnMgZm9sbG93ZWQgYnkgYG9gKVxuLy8gLSAoXFx3KVxcMSogbWF0Y2hlcyBhbnkgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIGxldHRlclxuLy8gLSAnJyBtYXRjaGVzIHR3byBxdW90ZSBjaGFyYWN0ZXJzIGluIGEgcm93XG4vLyAtICcoJyd8W14nXSkrKCd8JCkgbWF0Y2hlcyBhbnl0aGluZyBzdXJyb3VuZGVkIGJ5IHR3byBxdW90ZSBjaGFyYWN0ZXJzICgnKSxcbi8vICAgZXhjZXB0IGEgc2luZ2xlIHF1b3RlIHN5bWJvbCwgd2hpY2ggZW5kcyB0aGUgc2VxdWVuY2UuXG4vLyAgIFR3byBxdW90ZSBjaGFyYWN0ZXJzIGRvIG5vdCBlbmQgdGhlIHNlcXVlbmNlLlxuLy8gICBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBzaW5nbGUgcXVvdGVcbi8vICAgdGhlbiB0aGUgc2VxdWVuY2Ugd2lsbCBjb250aW51ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG4vLyAtIC4gbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciB1bm1hdGNoZWQgYnkgcHJldmlvdXMgcGFydHMgb2YgdGhlIFJlZ0V4cHNcbnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG4vLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG52YXIgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcbnZhciBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG52YXIgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbnZhciB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG5cbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqID4gXHUyNkEwXHVGRTBGIFBsZWFzZSBub3RlIHRoYXQgdGhlIGBmb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKiAoc2VlIHRoZSBsYXN0IGV4YW1wbGUpXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDcgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBBY2NlcHRlZCBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDB0aCwgMTd0aCAgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgMjAxN3RoICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgUiAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSICAgICAgfCAtNDMsIDAwLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAwLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAwLCAwMDAxLCAxOTAwLCAyMDE3ICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUsNyB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCB1ICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCA3ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhICAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWEgICAgIHwgYW0sIHBtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCBiLi5iYiAgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiICAgICB8IGFtLCBwbSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmIgICAgfCBhLm0uLCBwLm0uLCBub29uLCBtaWRuaWdodCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiYiAgIHwgYSwgcCwgbiwgbWkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgIHwgQi4uQkJCICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkIgICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCQiAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgIHwgaCAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAxMnRoICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaCAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhvICAgICAgfCAwdGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgIHwgSyAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAwdGggICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLSyAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgIHwgayAgICAgICB8IDI0LCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtvICAgICAgfCAyNHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrayAgICAgIHwgMjQsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbSAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbSAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcyAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcyAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDEsIC4uLiwgOTk5ICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICAgfCBPLi4uT09PIHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT09PTyAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pICB8IHouLi56enogfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCA2ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB6enp6ICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiw2ICAgfFxuICogfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgIHwgdCAgICAgICB8IDUxMjk2OTUyMCAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR0ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8IFAgICAgICAgfCAwNC8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUCAgICAgIHwgQXByIDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQICAgICB8IEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFAgICAgfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcCAgICAgfCAxMjowMDowMCBBTSBHTVQrMiAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHBwICAgIHwgMTI6MDA6MDAgQU0gR01UKzAyOjAwICAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBDb21iaW5hdGlvbiBvZiBkYXRlIGFuZCB0aW1lICAgIHwgUHAgICAgICB8IDA0LzI5LzE0NTMsIDEyOjAwIEFNICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQcHAgICAgfCBBcHIgMjksIDE0NTMsIDEyOjAwOjAwIEFNICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBwcHAgIHwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUHBwcHB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICB8IDIsNyAgIHxcbiAqIE5vdGVzOlxuICogMS4gXCJGb3JtYXR0aW5nXCIgdW5pdHMgKGUuZy4gZm9ybWF0dGluZyBxdWFydGVyKSBpbiB0aGUgZGVmYXVsdCBlbi1VUyBsb2NhbGVcbiAqICAgIGFyZSB0aGUgc2FtZSBhcyBcInN0YW5kLWFsb25lXCIgdW5pdHMsIGJ1dCBhcmUgZGlmZmVyZW50IGluIHNvbWUgbGFuZ3VhZ2VzLlxuICogICAgXCJGb3JtYXR0aW5nXCIgdW5pdHMgYXJlIGRlY2xpbmVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxhbmd1YWdlXG4gKiAgICBpbiB0aGUgY29udGV4dCBvZiBhIGRhdGUuIFwiU3RhbmQtYWxvbmVcIiB1bml0cyBhcmUgYWx3YXlzIG5vbWluYXRpdmUgc2luZ3VsYXI6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqIDIuIEFueSBzZXF1ZW5jZSBvZiB0aGUgaWRlbnRpY2FsIGxldHRlcnMgaXMgYSBwYXR0ZXJuLCB1bmxlc3MgaXQgaXMgZXNjYXBlZCBieVxuICogICAgdGhlIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIChzZWUgYmVsb3cpLlxuICogICAgSWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIGxpc3RlZCBpbiB0YWJsZSAoZS5nLiBgRUVFRUVFRUVFRUVgKVxuICogICAgdGhlIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRlZmF1bHQgcGF0dGVybiBmb3IgdGhpcyB1bml0LCB1c3VhbGx5XG4gKiAgICB0aGUgbG9uZ2VzdCBvbmUgKGluIGNhc2Ugb2YgSVNPIHdlZWtkYXlzLCBgRUVFRWApLiBEZWZhdWx0IHBhdHRlcm5zIGZvciB1bml0c1xuICogICAgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU0nKSAvLz0+ICdOb3YnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NJykgLy89PiAnTidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqIDMuIFNvbWUgcGF0dGVybnMgY291bGQgYmUgdW5saW1pdGVkIGxlbmd0aCAoc3VjaCBhcyBgeXl5eXl5eXlgKS5cbiAqICAgIFRoZSBvdXRwdXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB6ZXJvcyB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAneXl5eXl5eXknKSAvLz0+ICcwMDAwMjAxNydgXG4gKlxuICogNC4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNS4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAqICAgIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZDpcbiAqXG4gKiAgICB8IFllYXIgfCBgeXlgIHwgYHV1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gKiAgICB8IDEgICAgfCAgIDAxIHwgICAwMSB8XG4gKiAgICB8IDE0ICAgfCAgIDE0IHwgICAxNCB8XG4gKiAgICB8IDM3NiAgfCAgIDc2IHwgIDM3NiB8XG4gKiAgICB8IDE0NTMgfCAgIDUzIHwgMTQ1MyB8XG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbZ2V0SVNPV2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0SVNPV2Vla1llYXJ9XG4gKiAgICBhbmQgW2dldFdlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldFdlZWtZZWFyfSkuXG4gKlxuICogNi4gU3BlY2lmaWMgbm9uLWxvY2F0aW9uIHRpbWV6b25lcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGluIGBkYXRlLWZuc2AsXG4gKiAgICBzbyByaWdodCBub3cgdGhlc2UgdG9rZW5zIGZhbGwgYmFjayB0byBHTVQgdGltZXpvbmVzLlxuICpcbiAqIDcuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYHRgOiBzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgVGA6IG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogOC4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA5LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIGRheXMgb2YgdGhlIG1vbnRoLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIHRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIgdG9rZW5zIGBZWWAgYW5kIGBZWVlZYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSBkYXkgb2YgeWVhciB0b2tlbnMgYERgIGFuZCBgRERgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRMb25nYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgN1xuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdChkaXJ0eURhdGUsIGRpcnR5Rm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfb3B0aW9ucyRsb2NhbGUsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlMiwgX29wdGlvbnMkbG9jYWxlMiRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIsIF9yZWY1LCBfcmVmNiwgX3JlZjcsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlMywgX29wdGlvbnMkbG9jYWxlMyRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0O1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGZvcm1hdFN0ciA9IFN0cmluZyhkaXJ0eUZvcm1hdFN0cik7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBsb2NhbGUgPSAoX3JlZiA9IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRsb2NhbGUgIT09IHZvaWQgMCA/IF9vcHRpb25zJGxvY2FsZSA6IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IGRlZmF1bHRMb2NhbGU7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYyID0gKF9yZWYzID0gKF9yZWY0ID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiRvcHRpID0gX29wdGlvbnMkbG9jYWxlMi5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTIkb3B0aS5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWY0ICE9PSB2b2lkIDAgPyBfcmVmNCA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWY1ID0gKF9yZWY2ID0gKF9yZWY3ID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyRvcHRpID0gX29wdGlvbnMkbG9jYWxlMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTMkb3B0aS53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY3ICE9PSB2b2lkIDAgPyBfcmVmNyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjYgIT09IHZvaWQgMCA/IF9yZWY2IDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0LndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjUgIT09IHZvaWQgMCA/IF9yZWY1IDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIGlmICghbG9jYWxlLmxvY2FsaXplKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gbG9jYWxpemUgcHJvcGVydHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5mb3JtYXRMb25nKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gZm9ybWF0TG9uZyBwcm9wZXJ0eScpO1xuICB9XG4gIHZhciBvcmlnaW5hbERhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIH1cblxuICAvLyBDb252ZXJ0IHRoZSBkYXRlIGluIHN5c3RlbSB0aW1lem9uZSB0byB0aGUgc2FtZSBkYXRlIGluIFVUQyswMDowMCB0aW1lem9uZS5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBVVEMgZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQsIGxvY2FsZXMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlbS5cbiAgLy8gU2VlIGFuIGlzc3VlIGFib3V0IFVUQyBmdW5jdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG4gIHZhciB0aW1lem9uZU9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlKTtcbiAgdmFyIHV0Y0RhdGUgPSBzdWJNaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlLCB0aW1lem9uZU9mZnNldCk7XG4gIHZhciBmb3JtYXR0ZXJPcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbjogd2Vla1N0YXJ0c09uLFxuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIF9vcmlnaW5hbERhdGU6IG9yaWdpbmFsRGF0ZVxuICB9O1xuICB2YXIgcmVzdWx0ID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICdwJyB8fCBmaXJzdENoYXJhY3RlciA9PT0gJ1AnKSB7XG4gICAgICB2YXIgbG9uZ0Zvcm1hdHRlciA9IGxvbmdGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgIHJldHVybiBcIidcIjtcbiAgICB9XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCInXCIpIHtcbiAgICAgIHJldHVybiBjbGVhbkVzY2FwZWRTdHJpbmcoc3Vic3RyaW5nKTtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdHRlcih1dGNEYXRlLCBzdWJzdHJpbmcsIGxvY2FsZS5sb2NhbGl6ZSwgZm9ybWF0dGVyT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChmaXJzdENoYXJhY3Rlci5tYXRjaCh1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCcgKyBmaXJzdENoYXJhY3RlciArICdgJyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIHZhciBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICByZXR1cm4gbWF0Y2hlZFsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwLCBcIidcIik7XG59IiwgImV4cG9ydCBjb25zdCBwb2ludHNOb3RlTWFqdXJpdHkgPSAxMDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNNYWp1cml0eSA9IDEwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgPSA1MDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgPSAyMDAwO1xyXG5leHBvcnQgY29uc3QgYXZhdGFySW5pdENvbnRlbnQgPSAgYCMgQXZhdGFyXHJcblxyXG58ICAgICAgICB8ICAgICB8XHJcbnwgLS0tLS0tIHwgLS0tIHxcclxufCBMZXZlbCAgfCAwICAgIHxcclxufCBQb2ludHMgfCAwICAgIHxcclxuXmxldmVsQW5kUG9pbnRzXHRcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW0V4cHJpcmllbmNlXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXHJcbiAgICBkYXRhOiBbMTAwMF1cclxueE1pbjogMFxyXG54TWF4OiAxMDAwXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XHJcbnwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0gfFxyXG58ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqMCoqIHxcclxuXmJvb3N0ZXJGYWN0b3JcclxufCAgICAgICAgICAgICB8ICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLSB8IC0tLSB8IC0tLS0tIHxcclxufCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKiowLzIqKiB8XHJcbl5kYWlseU5vdGVzQ2hhbGxlbmdlXHJcbnwgIHwgICAgIHx8XHJcbnwgLS0tLSB8IC0tLSB8IC0tLSB8XHJcbnwgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKjAvNyoqICAgfFxyXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW05vdGVzXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogZGF5cyBkb25lIGluIGEgcm93XHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XHJcbiAgICBkYXRhOiBbN11cclxueE1pbjogMFxyXG54TWF4OiA3XHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwiZGF5c1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58IExldmVsIHwgQ291bnQgfFxyXG58IDotLS06IHwgOi0tLTogfFxyXG58IE1hanVyaXR5IDUgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs1LCAnNScsICc1XHUyN0ExXHVGRTBGJywgJzVcdTJCMDdcdUZFMEYnLCAnNVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDQgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFs0LCAnNCcsICc0XHUyN0ExXHVGRTBGJywgJzRcdTJCMDdcdUZFMEYnLCAnNFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDMgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFszLCAnMycsICczXHUyN0ExXHVGRTBGJywgJzNcdTJCMDdcdUZFMEYnLCAnM1x1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDIgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsyLCAnMicsICcyXHUyN0ExXHVGRTBGJywgJzJcdTJCMDdcdUZFMEYnLCAnMlx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDEgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFsxLCAnMScsICcxXHUyN0ExXHVGRTBGJywgJzFcdTJCMDdcdUZFMEYnLCAnMVx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG58IE1hanVyaXR5IDAgfFxcYCQ9ZHYucGFnZXMoKS53aGVyZShwID0+IFswLCAnMCcsICcwXHUyN0ExXHVGRTBGJywgJzBcdTJCMDdcdUZFMEYnLCAnMFx1MkIwNlx1RkUwRiddLmluY2x1ZGVzKHAuZmlsZS5mcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddKSkubGVuZ3RoXFxgfFxyXG5cclxuXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFswLCAwLCAwXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogbW9kaWZpZWRcclxuICAgIGRhdGE6IFswLCAwLCAwXVxyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDgwICVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxueVRpdGxlOiBcIk51bWJlciBvZiBOb3Rlc1wiXHJcbnhUaXRsZTogXCJNb250aHNcIlxyXG54TWluOiAwXHJcblxcYFxcYFxcYFxyXG5eQ2hhcnRNb250aFxyXG5cclxuXHJcbiMjIyBCYWRnZXNcclxuIyMjIyBhY2hpZXZlZFxyXG5cclxuXHJcbiMjIyMgb3V0c3RhbmRpbmdcclxubGV2ZWwgNTogKkVubGlnaHRlbmVkIE5vdmljZSpcclxubGV2ZWwgMTA6ICpDdXJpb3VzIENvbm5vaXNzZXVyKlxyXG5sZXZlbCAyMDogKkJyYWluaWFjIFRyYWlsYmxhemVyKlxyXG5sZXZlbCAyNzogKlNjaG9sYXJseSBUcmFpbGJsYXplcipcclxubGV2ZWwgMzU6ICpJbmZvIE5pbmphIE1hc3RlcipcclxubGV2ZWwgNDI6ICpXaXNlIE93bCBHdXJ1KlxyXG5sZXZlbCA1MDogKkVpbnN0ZWluIEluY2FybmF0ZSpcclxubGV2ZWwgNjA6ICpNYXN0ZXJtaW5kIFNhZ2UqXHJcbmxldmVsIDc1OiAqQ2VyZWJyYWwgTWFlc3RybypcclxubGV2ZWwgODI6ICpaZW4gS25vd2xlZGdlIEtlZXBlcipcclxubGV2ZWwgOTA6ICpHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQqXHJcbmxldmVsIDEwMDogKk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nKlxyXG5cclxuXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNSoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA1IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA0KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDQgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAzXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAzIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDFcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDEgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAwXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAwIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuYDtcclxuIiwgImltcG9ydCB7IFRGaWxlLCBBcHAsIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZVByb2dyZXNzaXZlU3VtbWFyaXphdGlvbihjaGFyQ291bnRUb3RhbDogbnVtYmVyLCBsYXllcjJjb3VudDogbnVtYmVyLCBsYXllcjNjb3VudDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRjb25zdCBwZXJjZW50TGF5ZXIyID0gbGF5ZXIyY291bnQgKiAxMDAgLyBjaGFyQ291bnRUb3RhbDtcclxuICAgIGNvbnN0IHBlcmNlbnRMYXllcjMgPSBsYXllcjNjb3VudCAqIDEwMCAvIGxheWVyMmNvdW50O1xyXG5cdHZhciBsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0dmFyIGxheWVyM21hanVyaXR5ID0gMDtcclxuXHR2YXIgbWFqdXJpdHkgPSAwO1xyXG5cdGlmIChjaGFyQ291bnRUb3RhbCA8IDMwMDApIHtcclxuXHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdC8vY29uc29sZS5sb2coYE5vdGUgaXMgbm90IGxvbmcgZW5vdWdoIHRvIGdldCBpbnRvIGNhbGN1bGF0aW9uIGZvciBtYWp1cml0eS4gVGhlIHRvdGFsIGNoYXJhY3RlciBjb3VudCBpcyAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRpZiAocGVyY2VudExheWVyMiA9PSAwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDMwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjNjb3VudCA9PSAwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjJtYWp1cml0eSA9PSAxICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSAyICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA+PSAzICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmICgobGF5ZXIybWFqdXJpdHkgPT0gMyB8fCBsYXllcjJtYWp1cml0eSA9PSA0KSAmJiAobGF5ZXIzbWFqdXJpdHkgPT0gNCB8fCBsYXllcjNtYWp1cml0eSA9PSA1KSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDUgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gNSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRcclxuXHQvL2NvbnNvbGUubG9nKGBsYXllcjJtYWp1cml0eTogJHtsYXllcjJtYWp1cml0eX0gXFx0bGF5ZXIzbWFqdXJpdHk6ICR7bGF5ZXIzbWFqdXJpdHl9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYHBlcmNlbnRMYXllcjI6ICR7cGVyY2VudExheWVyMn0gXFx0cGVyY2VudExheWVyMzogJHtwZXJjZW50TGF5ZXIzfSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBjaGFyQ291bnRUb3RhbDogJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHRyZXR1cm4gbWFqdXJpdHk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgbGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKTogeyBjaGFyQ291bnQ6IG51bWJlcjsgaGlnaGxpZ2h0ZWRDb3VudDogbnVtYmVyOyBib2xkQ291bnQ6IG51bWJlciB9IHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblxyXG5cdC8vIGNhbGN1bGF0ZSBMYXllciAyICYgMyBMZW5ndGhcclxuXHJcblx0Ly8gQ291bnQgdGhlIGhpZ2hsaWdodGVkIGFuZCBib2xkIGNoYXJhY3RlcnNcclxuXHRsZXQgaGlnaGxpZ2h0ZWRDb3VudCA9IDA7XHJcblx0bGV0IGJvbGRDb3VudCA9IDA7XHJcbiAgXHJcblx0dmFyIGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR2YXIgbGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHQvLyB0byBoYXZlIHRoZSByZWcgZXggY29ycmVjdC4gb3RoZXJ3aXNlIGl0IHdpbGwgZ2V0IHN0dWMgd2l0aCAqKi5cclxuXHRpZihsYXllcjMgPT0gJyoqJyl7XHJcblx0XHRsYXllcjMgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0XHRsYXllcjJleGNsdWRlID0gJz0nXHJcblx0fVxyXG5cdGlmKGxheWVyMiA9PSAnKionKXtcclxuXHRcdGxheWVyMiA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICc9J1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICdcXFxcKidcclxuXHR9XHJcbiAgXHRcclxuXHJcblx0Y29uc3QgaGlnaGxpZ2h0UmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyMn1bXiR7bGF5ZXIyZXhjbHVkZX1dKyR7bGF5ZXIyfWAsIFwiZ1wiKTtcclxuICAgIGNvbnN0IGJvbGRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIzfVteJHtsYXllcjNleGNsdWRlfV0rJHtsYXllcjN9YCwgXCJnXCIpO1xyXG4gIFxyXG5cdC8vIENvdW50IGhpZ2hsaWdodGVkIGNoYXJhY3RlcnNcclxuXHRjb25zdCBoaWdobGlnaHRlZE1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKGhpZ2hsaWdodFJlZ2V4KTtcclxuXHRpZiAoaGlnaGxpZ2h0ZWRNYXRjaGVzKSB7XHJcblx0ICBoaWdobGlnaHRlZENvdW50ID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGhpZ2hsaWdodGVkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnPT0nXHJcblx0ICAvLyBmaXJzdCB0YWtlIHRoZSBsYXllcjIgKGhpZ2hsaWdodGVkQ291bnQpIGFuZCBydW4gb24gdGhpcyB0aGUgJ2JvbGRSZWdleCdcclxuXHQgIC8vIENvdW50IGJvbGQgY2hhcmFjdGVyc1xyXG5cdCAgY29uc3QgbGF5ZXIyU3RyaW5nID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIik7XHJcblx0ICBjb25zdCBib2xkTWF0Y2hlcyA9IGxheWVyMlN0cmluZy5tYXRjaChib2xkUmVnZXgpO1xyXG5cdCAgaWYgKGJvbGRNYXRjaGVzKSB7XHJcblx0ICAgIGJvbGRDb3VudCA9IGJvbGRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGJvbGRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICcqKidcclxuXHQgIH1cclxuXHR9XHJcbiAgXHJcblx0XHJcblx0XHJcbiAgXHJcblx0cmV0dXJuIHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfTtcclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxldmVsT2ZNYXR1cml0eShub3RlTGVuZ3RoOiBudW1iZXIsIGxlbmd0aE9mVGl0bGU6IG51bWJlciwgSW5saW5rczogbnVtYmVyLCBvdXRnb2luZ0xpbmtzOiBudW1iZXIsIHByb2dyZXNzaXZlU3VtTWFqdXJpdHk6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG5vdGVMZW5ndGg6ICR7bm90ZUxlbmd0aH1cXHRsZW5ndGhPZlRpdGxlOiAke2xlbmd0aE9mVGl0bGV9XFx0SW5saW5rczogJHtJbmxpbmtzfVxcdG91dGdvaW5nTGlua3M6ICR7b3V0Z29pbmdMaW5rc31gKVxyXG5cdFxyXG5cdC8vIGRlY2lkZSBpZiBub3RlTGVuZ3RoLW1hanVyaXR5IG9yIHByb2dyZXNzaXZlU3VtLW1hanVyaXR5IHNoYWxsIGJlIHVzZWRcclxuXHR2YXIgbGVuZ3RoTWFqdXJpdHkgPSAwO1xyXG5cdGlmKG5vdGVMZW5ndGggPj0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eSkge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBub3RlTGVuZ3RoO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IHByb2dyZXNzaXZlU3VtTWFqdXJpdHk7XHJcblx0fVxyXG5cdFxyXG5cdGNvbnN0IHRvdGFsV2VpZ2h0IDogbnVtYmVyID0gbGVuZ3RoTWFqdXJpdHkgKyBsZW5ndGhPZlRpdGxlICsgSW5saW5rcyArIG91dGdvaW5nTGlua3M7XHJcblx0Y29uc3QgYXZlcmFnZVdlaWdodCA9IHRvdGFsV2VpZ2h0IC8gNTtcclxuXHQvLyBjb25zb2xlLmxvZyhgdG90YWxXZWlnaHQ6ICR7dG90YWxXZWlnaHR9XFx0YXZlcmFnZVdlaWdodDogJHthdmVyYWdlV2VpZ2h0fWApXHJcblx0aWYgKGF2ZXJhZ2VXZWlnaHQgPCAwLjUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAxKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMikge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzLjUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSA0KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVPdXRsaW5rcyhvdXRsaW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgb3V0bGlua3M6ICR7b3V0bGlua3N9YClcclxuXHRpZiAob3V0bGlua3MgPCAyKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMykge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA5KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMikge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlSW5saW5rcyhudW1JbmxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vdmFyIHByb3plbnRJbmxpbmtzID0gbnVtSW5saW5rcyAqIDEwMCAvIG51bUFsbEZpbGVzO1xyXG5cdC8vY29uc29sZS5sb2coYG51bUlubGlua3M6ICR7bnVtSW5saW5rc31cXHRudW1BbGxGaWxlczogJHtudW1BbGxGaWxlc31cXHRwcm96ZW50SW5saW5rczogJHtwcm96ZW50SW5saW5rc31gKVxyXG5cdC8qaWYgKHByb3plbnRJbmxpbmtzIDwgMC4wMDUgfHwgcHJvemVudElubGlua3MgPiAwLjEpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSAqLyBpZiAobnVtSW5saW5rcyA9PSAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA0KSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA4KSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTYpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA+PSAxNiAmJiBudW1JbmxpbmtzIDwgNTAwICkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlRGlyZWN0aW9uKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCByYXRpbmcgPSBcIlwiXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA+IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwN1x1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDZcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID09IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MjdBMVx1RkUwRlwiXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXCJcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGVuZ3RoRmlsZW5hbWUoZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDMwKSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCA4MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTAwKSB7XHJcblx0cmV0dXJuIDM7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxNTApIHtcclxuXHRyZXR1cm4gNTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE5MCkge1xyXG5cdHJldHVybiA0O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjEwKSB7XHJcblx0cmV0dXJuIDI7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyNTApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2Uge1xyXG5cdHJldHVybiAwO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTm90ZUxlbmd0aChjb250ZW5sZW5ndGg6IG51bWJlcik6IG51bWJlciB7XHJcblx0aWYgKGNvbnRlbmxlbmd0aCA8IDIwMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCA1NTApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTAwMCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMjAwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDIwMDApIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjUwMCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAzMDAwKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWJlck9mT3V0bGlua3MoYWN0aXZlRmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG5cdC8vIGNvbnN0IGFjdGl2ZUZpbGU6IFRGaWxlIHwgbnVsbCA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG5cdGlmICghYWN0aXZlRmlsZSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cdGNvbnN0IGlubGlua3MgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoYWN0aXZlRmlsZSk/LmxpbmtzO1xyXG5cdHJldHVybiBpbmxpbmtzID8gT2JqZWN0LmtleXMoaW5saW5rcykubGVuZ3RoIDogMDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblx0cmV0dXJuIGNoYXJDb3VudDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzX3NpbmdsZShmaWxlX3BhdGg6IHN0cmluZywgdmF1bHRfcGF0aDogc3RyaW5nKTogbnVtYmVyIHtcclxuXHQvLyBHZXQgdGhlIGZpbGVuYW1lIGFuZCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUgd2UncmUgY291bnRpbmcgbGlua3MgdG9cclxuXHRjb25zdCBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZV9wYXRoKTtcclxuXHRjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZmlsZV9wYXRoKTtcclxuXHJcblx0Ly8gQ3JlYXRlIGEgc2V0IHRvIGhvbGQgYWxsIHRoZSBmaWxlcyB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3QgbGlua2luZ19maWxlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcblxyXG5cdC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgZmlsZXMgaW4gdGhlIHZhdWx0IGRpcmVjdG9yeSB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3Qgd2Fsa1N5bmMgPSAoZGlyOiBzdHJpbmcsIGZpbGVsaXN0OiBzdHJpbmdbXSkgPT4ge1xyXG5cdFx0Y29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpO1xyXG5cdFx0ZmlsZWxpc3QgPSBmaWxlbGlzdCB8fCBbXTtcclxuXHRcdGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRpZiAoZnMuc3RhdFN5bmMocGF0aC5qb2luKGRpciwgZmlsZSkpLmlzRGlyZWN0b3J5KCkpIHtcclxuXHRcdFx0XHRmaWxlbGlzdCA9IHdhbGtTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBmaWxlbGlzdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWdub3JlIG5vbi1tZCBmaWxlcyBhbmQgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGlmICghZmlsZS5lbmRzV2l0aChcIi5tZFwiKSB8fCBmaWxlID09PSBmaWxlbmFtZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmVhZCB0aGUgZmlsZSBhbmQgbG9vayBmb3IgbGlua3MgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcclxuXHRcdFx0XHRkYXRhLnNwbGl0KCdcXG4nKS5mb3JFYWNoKChsaW5lOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdGlmIChsaW5lLmluY2x1ZGVzKGBbWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1dYCkgfHwgbGluZS5pbmNsdWRlcyhgWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1gKSkge1xyXG5cdFx0XHRcdFx0XHQvLyBXZSBmb3VuZCBhIGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlIVxyXG5cdFx0XHRcdFx0XHRsaW5raW5nX2ZpbGVzLmFkZChwYXRoLnJlbGF0aXZlKGRpcmVjdG9yeSwgcGF0aC5qb2luKGRpciwgZmlsZSkpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gZmlsZWxpc3Q7XHJcblx0fTtcclxuXHJcblx0d2Fsa1N5bmModmF1bHRfcGF0aCwgW10pO1xyXG5cclxuXHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBhcmUgbWVudGlvbmluZyB0aGUgaW5wdXQgZmlsZVxyXG5cdHJldHVybiBsaW5raW5nX2ZpbGVzLnNpemU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rcyhmaWxlOiBURmlsZSk6IG51bWJlciB7XHJcbiAgICBjb25zdCB7IGFwcDogeyBtZXRhZGF0YUNhY2hlOiB7IHJlc29sdmVkTGlua3MgfSB9IH0gPSB0aGlzO1xyXG4gICAgY29uc3QgeyBwYXRoIH0gPSBmaWxlO1xyXG5cclxuICAgIGNvbnN0IHN1bUlubGlua3MgPSBPYmplY3QudmFsdWVzKHJlc29sdmVkTGlua3MpXHJcbiAgICAgICAgLm1hcCgodmFsOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9KSA9PiB2YWxbcGF0aF0gPz8gMClcclxuICAgICAgICAucmVkdWNlKChsZWZ0LCByaWdodCkgPT4gbGVmdCArIHJpZ2h0LCAwKTtcclxuXHJcbiAgICByZXR1cm4gc3VtSW5saW5rcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlQ291bnRNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+PiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHRcclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdFxyXG5cclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHRcclxuICAgIGNvbnN0IGZpbGVDb3VudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHJcblx0XHRjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG4gICAgICAgIH1cclxuXHRcdFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWxlQ291bnRNYXA7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxURmlsZVtdPiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkU3Vic3RyaW5nczogJHtleGNsdWRlZFN1YnN0cmluZ3N9YClcclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZEZvbGRlcnM6ICR7ZXhjbHVkZWRGb2xkZXJzfWApXHRcclxuICAgIGxldCBmaWxlQXJyYXk6IFRGaWxlW10gPSBbXTtcclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgZmlsZS5wYXRoOiAke2ZpbGUucGF0aH1gKVxyXG5cdFx0aWYgKCghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSB8fCBleGNsdWRlVGFnLmxlbmd0aCA9PT0gMCkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGUgJHtmaWxlfSBnZXQncyBhZGRlZC5gKVxyXG5cdFx0XHRmaWxlQXJyYXkucHVzaChmaWxlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaWxlQXJyYXk7XHJcbn07XHJcbiIsICJpbXBvcnQge1RGaWxlfSBmcm9tICdvYnNpZGlhbic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0Q3JlYXRlZEZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RDcmVhdGVkRmlsZTtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RNb2RpZmllZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RNb2RpZmllZEZpbGUuc3RhdC5tdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdE1vZGlmaWVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdE1vZGlmaWVkRmlsZTtcclxufSAgXHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdERhdGVGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdENyZWF0ZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5jdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vbnRoc0JldHdlZW4oc3RhcnRNb250aDogRGF0ZSwgZW5kTW9udGg6IERhdGUpOiBudW1iZXIge1xyXG5cdGxldCBtb250aHMgPSAoZW5kTW9udGguZ2V0TW9udGgoKSAtIHN0YXJ0TW9udGguZ2V0TW9udGgoKSkgKyAxO1xyXG5cdGlmIChlbmRNb250aC5nZXRGdWxsWWVhcigpID4gc3RhcnRNb250aC5nZXRGdWxsWWVhcigpKSB7XHJcblx0XHRtb250aHMgKz0gKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgLSBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpKjEyO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9udGhzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQuY3RpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXM6IFRGaWxlW10pOiBBcnJheTxEYXRlPiB7XHJcblx0Y29uc3QgY3JlYXRpb25EYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICBcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGNyZWF0aW9uRGF0ZXMucHVzaChuZXcgRGF0ZShmaWxlLnN0YXQubXRpbWUpKTtcclxuXHR9XHJcbiAgXHJcblx0cmV0dXJuIGNyZWF0aW9uRGF0ZXM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhcnRGb3JtYXQoeV9heGlzOiBzdHJpbmcsIGNvdW50c1N0cmluZ01vZDogc3RyaW5nLCBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCBtb25hdHNiZWdyZW56dW5nID0gbnVsbFxyXG5cdGlmIChjaGFydFJlZHV6aWVydW5nTW9uYXRlID09IDApe1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IDBcclxuXHR9IGVsc2Uge1xyXG5cdFx0bW9uYXRzYmVncmVuenVuZyA9IGNvdW50c1N0cmluZ01vZC5zcGxpdCgnLCcpLmxlbmd0aCAtIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHR9XHJcblx0XHJcblx0Ly9jb25zdCBtb25hdHNiZWdyZW56dW5nID0gbGVuZ3RoY291bnRzU3RyaW5nQ3JlYXRlIC0gdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlXHJcblx0cmV0dXJuIFwiYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtcIiArIHlfYXhpcyArIFwiXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IG1vZGlmaWVkXFxuICAgIGRhdGE6IFtcIiArIGNvdW50c1N0cmluZ01vZCArIFwiXVxcbnRlbnNpb246IDAuMlxcbndpZHRoOiA4MCAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG55VGl0bGU6IFxcXCJOdW1iZXIgb2YgTm90ZXNcXFwiXFxueFRpdGxlOiBcXFwiTW9udGhzXFxcIlxcbnhNaW46IFwiICsgbW9uYXRzYmVncmVuenVuZyArIFwiXFxuYGBgXCI7XHJcbn1cclxuXHJcbiAgXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQ2hhcnRDb250ZW50IChhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBuZXdDb250ZW50OiBzdHJpbmcpIHtcclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRpZiAobGluZSA9PT0gXCJeQ2hhcnRNb250aFwiKSB7XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmIChyZWZlcmVuY2UgIT0gbnVsbCl7XHJcblx0XHRlbmQgPSByZWZlcmVuY2U7XHJcblx0XHRzdGFydCA9IHJlZmVyZW5jZSAtIDE5O1xyXG5cdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBuZXdDb250ZW50LCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIGxldmVsOiBzdHJpbmc7XHJcbiAgfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSWZSZWNlaXZlQUJhZGdlKGxldmVsT2xkOiBudW1iZXIsIGxldmVsTmV3OiBudW1iZXIpOiBib29sZWFuIHtcclxuICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgbGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcbiAgZm9yIChsZXQgaT0wOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspe1xyXG4gICAgaWYgKGxldmVsT2xkIDwgYmFkZ2VMZXZlbHNbaV0gJiYgbGV2ZWxOZXcgPj0gYmFkZ2VMZXZlbHNbaV0pe1xyXG4gICAgICByZWNlaXZlQmFkZ2UgPSB0cnVlXHJcbiAgICB9IFxyXG4gIH1cclxuICByZXR1cm4gcmVjZWl2ZUJhZGdlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIsIGluZm9ybTogYm9vbGVhbik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiLCBsZXZlbDogXCJsZXZlbCA1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgLCBsZXZlbDogXCJsZXZlbCAyMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZSBPd2wgR3VydVwiLCBkZXNjcmlwdGlvbjogXCJXaG9vLWhvbyEgWW91J3ZlIGFjaGlldmVkICdXaXNlIE93bCBHdXJ1JyBzdGF0dXMuIFlvdXIgd2lzZG9tIGlzIGxlZ2VuZGFyeSwgYW5kIHlvdXIgaG9vdHMgb2Yga25vd2xlZGdlIGVjaG8gdGhyb3VnaCB0aGUgZm9yZXN0IG9mIGlnbm9yYW5jZSFcIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVpbnN0ZWluIEluY2FybmF0ZVwiLCBkZXNjcmlwdGlvbjogXCJFdXJla2EhIFlvdSd2ZSBiZWNvbWUgYW4gJ0VpbnN0ZWluIEluY2FybmF0ZSwnIHB1c2hpbmcgdGhlIGJvdW5kYXJpZXMgb2YgdW5kZXJzdGFuZGluZyBhbmQgYmVuZGluZyB0aGUgZmFicmljIG9mIGtub3dsZWRnZSB0byB5b3VyIHdpbGwhXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJNYXN0ZXJtaW5kIFNhZ2VcIiwgZGVzY3JpcHRpb246IFwiTWFnbmlmaWNlbnQhIFlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgcmFuayBvZiAnTWFzdGVybWluZCBTYWdlLCcgZ3VpZGluZyB0aGUgcml2ZXJzIG9mIGluZm9ybWF0aW9uIGFuZCBlbmxpZ2h0ZW5pbmcgYWxsIHdobyBzZWVrIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNlcmVicmFsIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQnJhdmlzc2ltbyEgWW91J3JlIG5vdyBhICdDZXJlYnJhbCBNYWVzdHJvLCcgY29uZHVjdGluZyB0aGUgc3ltcGhvbnkgb2Yga25vd2xlZGdlIHdpdGggdGhlIGZpbmVzc2Ugb2YgYSB2aXJ0dW9zbyBjb25kdWN0b3IhXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJaZW4gS25vd2xlZGdlIEtlZXBlclwiLCBkZXNjcmlwdGlvbjogXCJTZXJlbml0eSBhY2hpZXZlZCEgQXMgYSAnWmVuIEtub3dsZWRnZSBLZWVwZXIsJyB5b3UgbWFpbnRhaW4gYSB0cmFucXVpbCBtaW5kIHdoaWxlIG1hbmFnaW5nIHZhc3QgcG9vbHMgb2Yga25vd2xlZGdlIHdpdGggZ3JhY2UgYW5kIHBvaXNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkXCIsIGRlc2NyaXB0aW9uOiBcIkFsbCBoYWlsIHRoZSAnR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkIScgWW91IHdpZWxkIHRoZSBrbm93bGVkZ2Ugb2YgYWdlcyBhbmQgaG9sZCB0aGUga2V5cyB0byB1bmxvY2sgdGhlIGdhdGVzIG9mIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nXCIsIGRlc2NyaXB0aW9uOiBcIkNvbmdyYXR1bGF0aW9ucywgb2ggd2lzZSBvbmUhIFlvdSd2ZSBhdHRhaW5lZCB0aGUgaGlnaGVzdCBsZXZlbCBvZiBlbmxpZ2h0ZW5tZW50IGFzIHRoZSAnT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcuJyBZb3VyIHVuZGVyc3RhbmRpbmcga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciB3aXNkb20gaXMgYXMgdmFzdCBhcyB0aGUgY29zbW9zIGl0c2VsZiFcIiwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc1tpbmRleF1cclxuICB9XHJcbiAgXHJcblxyXG5cclxuICBleHBvcnQgIGZ1bmN0aW9uIGdldEJhZGdlRm9ySW5pdExldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbMCwgMywgNywgMTUsIDIzLCAzMCwgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzSW5pdDogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgU2Vla2VyIEluaXRpYXRlXCIsIGRlc2NyaXB0aW9uOiBcIldlbGNvbWUgdG8gdGhlIGpvdXJuZXkgb2Yga25vd2xlZGdlISBBcyBhICdMb3JlIFNlZWtlciBJbml0aWF0ZSwnIHlvdSd2ZSB0YWtlbiB5b3VyIGZpcnN0IHN0ZXBzIGludG8gdGhlIHdvcmxkIG9mIG9yZ2FuaXplZCB3aXNkb20uIFlvdXIgcXVlc3QgaGFzIGp1c3QgYmVndW4sIGFuZCB3aXRoIGVhY2ggbm90ZSB5b3UgbWFrZSwgeW91IGxheSB0aGUgZm91bmRhdGlvbiBmb3IgYSBmdXR1cmUgcmljaCB3aXRoIGluc2lnaHRzIGFuZCB1bmRlcnN0YW5kaW5nLiBZb3VyIGpvdXJuZXkgc3RhcnRzIGhlcmUsIGFuZCB0aGUgcGF0aCBhaGVhZCBpcyBmaWxsZWQgd2l0aCBwb3RlbnRpYWwgYW5kIGRpc2NvdmVyeS5cIiwgbGV2ZWw6IFwibGV2ZWwgMVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEFwcHJlbnRpY2VcIiwgZGVzY3JpcHRpb246IFwiWW91J3ZlIGhpdCB0aGUgZ3JvdW5kIHJ1bm5pbmcgd2l0aCB5b3VyIGV4aXN0aW5nIGtub3dsZWRnZSB0cmVhc3VyZXMhIFlvdSdyZSBhbHJlYWR5IGFuICdMb3JlIEFwcHJlbnRpY2UsJyBhcm1lZCB3aXRoIGEgd2VhbHRoIG9mIHdpc2RvbSBhbmQgcmVhZHkgdG8gc2hhcGUgaXQgZnVydGhlci5cIiwgbGV2ZWw6IFwibGV2ZWwgM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYXZ2eSBTY2hvbGFyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBnaXZlbiB5b3UgYSBoZWFkIHN0YXJ0ISBZb3UncmUgbm93IGEgJ1NhdnZ5IFNjaG9sYXIsJyBjb25maWRlbnRseSBkaXZpbmcgaW50byB0aGUgc2VhIG9mIGluZm9ybWF0aW9uIHdpdGggYSB0cmVhc3VyZSB0cm92ZSBvZiBpbnNpZ2h0cy5cIiAsIGxldmVsOiBcImxldmVsIDdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2FnZSdzIEZvdW5kYXRpb25cIiwgZGVzY3JpcHRpb246IFwiQnVpbGRpbmcgdXBvbiB5b3VyIHByZS1leGlzdGluZyBub3RlcywgeW91J3JlIGVzdGFibGlzaGluZyB0aGUgJ1NhZ2UncyBGb3VuZGF0aW9uJyBmb3IgYW4gZXZlbiBncmFuZGVyIGVkaWZpY2Ugb2Yga25vd2xlZGdlLiBZb3VyIGdyb3VuZHdvcmsgaXMgaW1wcmVzc2l2ZSFcIiAsIGxldmVsOiBcImxldmVsIDE1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2RvbSBTZWVkbGluZ1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbnVydHVyZWQgdGhlIGdyb3d0aCBvZiBhICdXaXNkb20gU2VlZGxpbmcuJyBZb3UncmUgY3VsdGl2YXRpbmcgeW91ciBnYXJkZW4gb2Yga25vd2xlZGdlIHdpdGggY2FyZSBhbmQgcGF0aWVuY2UuXCIgLCBsZXZlbDogXCJsZXZlbCAyM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJQcm9kaWdpb3VzIFByZXBhcmVyXCIsIGRlc2NyaXB0aW9uOiBcIlRoYW5rcyB0byB5b3VyIHByaW9yIGVmZm9ydHMsIHlvdSdyZSBhICdQcm9kaWdpb3VzIFByZXBhcmVyLCcgc3RhbmRpbmcgdGFsbCBhbW9uZyB5b3VyIG5vdGVzIGFuZCByZWFkeSB0byBjb25xdWVyIG5ldyByZWFsbXMgb2YgdW5kZXJzdGFuZGluZy5cIiAsIGxldmVsOiBcImxldmVsIDMwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVwaWMgRXBpcGhhbnkgRXhwbG9yZXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBwYXN0IG5vdGVzIGhhdmUgbGVkIHlvdSB0byB0aGUgZ3JhbmQgJ0VwaWMgRXBpcGhhbnkgRXhwbG9yZXInIHN0YXR1cyEgWW91J3ZlIGFscmVhZHkgYmVlbiBkb3duIGEgZmV3IHJhYmJpdCBob2xlcyBhbmQgY29tZSBvdXQgd2l0aCBkYXp6bGluZyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgTHVtaW5hcnlcIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIGlsbHVtaW5hdGluZyB5b3VyIHBhdGgsIHlvdSd2ZSBiZWNvbWUgYSAnTG9yZSBMdW1pbmFyeSwnIHNoaW5pbmcgbGlnaHQgb24gdGhlIG15c3RlcmllcyBvZiB0aGUgdW5pdmVyc2UsIG9uZSBpZGVhIGF0IGEgdGltZS5cIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjcmliZSBvZiB0aGUgQW5jaWVudHNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBtYXN0ZXJ5IG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYW5hZ2VtZW50IGhhcyBlbGV2YXRlZCB5b3UgdG8gdGhlIGVzdGVlbWVkIHJhbmsgb2YgdGhlICdTY3JpYmUgb2YgdGhlIEFuY2llbnRzLicgWW91ciBleGlzdGluZyBub3RlcyBoYXZlIHRyYW5zZm9ybWVkIGludG8gdHJlYXN1cmVzLCBicmlkZ2luZyB0aGUgZ2FwIGJldHdlZW4gb2xkIHdpc2RvbSBhbmQgbmV3IGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXVyZWthIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQXJtZWQgd2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzLCB5b3UncmUgdGhlICdFdXJla2EgTWFlc3RybywnIGNvbXBvc2luZyBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHdpdGggdGhlIG1lbG9keSBvZiBkaXNjb3ZlcnkuXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDaHJvbmljbGVzIENoYW1waW9uXCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBzdGFuZGluZyBhcyBhIHRlc3RhbWVudCwgeW91J3ZlIGFzY2VuZGVkIHRvIHRoZSBpbGx1c3RyaW91cyAnQ2hyb25pY2xlcyBDaGFtcGlvbicgbGV2ZWwuIFlvdXIgam91cm5leSB0aHJvdWdoIHRpbWUncyB0YXBlc3RyeSBoYXMgYnJvdWdodCBmb3J0aCBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHBhc3QgYW5kIHByZXNlbnQuXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXJcIiwgZGVzY3JpcHRpb246IFwiQXMgJ1RoZSBDdXJpb3VzIENhcnRvZ3JhcGhlciwnIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYXBwZWQgb3V0IHVuY2hhcnRlZCB0ZXJyaXRvcmllcyBvZiB1bmRlcnN0YW5kaW5nLiBZb3VyIGN1cmlvc2l0eSBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIG5vdGVzIGFyZSB0aGUgY29tcGFzcyBndWlkaW5nIHlvdXIgZXhwbG9yYXRpb24uXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTdWx0YW4gb2YgU3ludGhlc2lzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYWRlIHlvdSB0aGUgJ1N1bHRhbiBvZiBTeW50aGVzaXMuJyBZb3UncmUgdGhlIG1hc3RlciB3ZWF2ZXIsIHRocmVhZGluZyB0b2dldGhlciB0aHJlYWRzIG9mIGluZm9ybWF0aW9uIGludG8gYSByaWNoIHRhcGVzdHJ5IG9mIGluc2lnaHQuXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdGVybmFsIEFyY2hpdmlzdFwiLCBkZXNjcmlwdGlvbjogXCJBdCB0aGUgcGlubmFjbGUgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hc3RlcnksIHlvdSdyZSBub3cgcmV2ZXJlZCBhcyB0aGUgJ0V0ZXJuYWwgQXJjaGl2aXN0LicgWW91ciBleGlzdGluZyBub3RlcywgY2FyZWZ1bGx5IGN1cmF0ZWQgYW5kIG51cnR1cmVkLCBzdGFuZCBhcyBpbW1vcnRhbCBiZWFjb25zLCBndWlkaW5nIHNlZWtlcnMgdGhyb3VnaCB0aGUgbGFieXJpbnRoIG9mIGtub3dsZWRnZSBhY3Jvc3MgYWdlcy5cIiAsIGxldmVsOiBcImxldmVsIDEwMFwiIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc0luaXRbaW5kZXhdXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRXhhbXBsZSB1c2FnZTpcclxuICAvLyBjb25zdCBjdXJyZW50TGV2ZWwgPSA0MjsgLy8gUmVwbGFjZSB0aGlzIHdpdGggdGhlIGFjdHVhbCBwbGF5ZXIncyBsZXZlbFxyXG4gIC8vIGNvbnN0IGJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChjdXJyZW50TGV2ZWwpO1xyXG4gIC8vIGNvbnNvbGUubG9nKGBDb25ncmF0dWxhdGlvbnMhIFlvdSd2ZSByZWFjaGVkIExldmVsICR7Y3VycmVudExldmVsfS4gWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YCk7XHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4gICAgLypcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiIH0sXHJcbiAgICAgIC8vIEFkZCBtb3JlIGJhZGdlcyBoZXJlIGZvciBsZXZlbHMgNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIGFuZCAxMDBcclxuICAgICAgLy8gRXhhbXBsZTpcclxuICAgICAgLy8geyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgfSxcclxuICAgICAgLy8geyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiB9LFxyXG4gICAgICAvLyAuLi5hbmQgc28gb25cclxuICAgIF07XHJcbiAgXHJcbiAgICBjb25zdCBtYXhMZXZlbCA9MTAwOyAvLyBBc3N1bWluZyBlYWNoIGJhZGdlIGlzIGF3YXJkZWQgZXZlcnkgNSBsZXZlbHNcclxuICAgIGNvbnN0IGNhcHBlZExldmVsID0gTWF0aC5taW4obGV2ZWwsIG1heExldmVsKTtcclxuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihjYXBwZWRMZXZlbCAvIDUpIC0gMTtcclxuICAgIHJldHVybiBiYWRnZXNbaW5kZXhdO1xyXG4gIH1cclxuICBcclxuXHJcbiAgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgfVxyXG4gICovXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIExldmVsRGF0YSB7XHJcbiAgICBwb2ludHM6IG51bWJlcjtcclxuICAgIGxldmVsOiBudW1iZXI7XHJcbiAgICBwb2ludHNOZXh0OiBudW1iZXI7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbnN0IGxldmVsRGF0YTogTGV2ZWxEYXRhW10gPSBbXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDAsIHBvaW50c05leHQ6IDB9LFxyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAxLCBwb2ludHNOZXh0OiAxMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMCwgbGV2ZWw6IDIsIHBvaW50c05leHQ6IDMwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwLCBsZXZlbDogMywgcG9pbnRzTmV4dDogNzUwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAsIGxldmVsOiA0LCBwb2ludHNOZXh0OiAxNTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MDAwLCBsZXZlbDogNSwgcG9pbnRzTmV4dDogMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMCwgbGV2ZWw6IDYsIHBvaW50c05leHQ6IDUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTAwMDAsIGxldmVsOiA3LCBwb2ludHNOZXh0OiA4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgwMDAwLCBsZXZlbDogOCwgcG9pbnRzTmV4dDogMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIwMDAwLCBsZXZlbDogOSwgcG9pbnRzTmV4dDogMTcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTcwMDAwLCBsZXZlbDogMTAsIHBvaW50c05leHQ6IDIzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMDAwMCwgbGV2ZWw6IDExLCBwb2ludHNOZXh0OiAzMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAsIGxldmVsOiAxMiwgcG9pbnRzTmV4dDogMzgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzgwMDAwLCBsZXZlbDogMTMsIHBvaW50c05leHQ6IDQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3MDAwMCwgbGV2ZWw6IDE0LCBwb2ludHNOZXh0OiA2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDAwMDAsIGxldmVsOiAxNSwgcG9pbnRzTmV4dDogNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMDAwLCBsZXZlbDogMTYsIHBvaW50c05leHQ6IDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMDAwMCwgbGV2ZWw6IDE3LCBwb2ludHNOZXh0OiAxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTExMDAwMCwgbGV2ZWw6IDE4LCBwb2ludHNOZXh0OiAxMzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMyMDAwMCwgbGV2ZWw6IDE5LCBwb2ludHNOZXh0OiAxNTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTU1MDAwMCwgbGV2ZWw6IDIwLCBwb2ludHNOZXh0OiAxODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTgwMDAwMCwgbGV2ZWw6IDIxLCBwb2ludHNOZXh0OiAyMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjA3MDAwMCwgbGV2ZWw6IDIyLCBwb2ludHNOZXh0OiAyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjM2MDAwMCwgbGV2ZWw6IDIzLCBwb2ludHNOZXh0OiAyNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjY3MDAwMCwgbGV2ZWw6IDI0LCBwb2ludHNOZXh0OiAzMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwMCwgbGV2ZWw6IDI1LCBwb2ludHNOZXh0OiAzMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM1MDAwMCwgbGV2ZWw6IDI2LCBwb2ludHNOZXh0OiAzNzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzcyMDAwMCwgbGV2ZWw6IDI3LCBwb2ludHNOZXh0OiA0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDExMDAwMCwgbGV2ZWw6IDI4LCBwb2ludHNOZXh0OiA0NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUyMDAwMCwgbGV2ZWw6IDI5LCBwb2ludHNOZXh0OiA0OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDk1MDAwMCwgbGV2ZWw6IDMwLCBwb2ludHNOZXh0OiA1NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQwMDAwMCwgbGV2ZWw6IDMxLCBwb2ludHNOZXh0OiA1ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTg3MDAwMCwgbGV2ZWw6IDMyLCBwb2ludHNOZXh0OiA2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjM2MDAwMCwgbGV2ZWw6IDMzLCBwb2ludHNOZXh0OiA2ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjg3MDAwMCwgbGV2ZWw6IDM0LCBwb2ludHNOZXh0OiA3NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwMDAwMCwgbGV2ZWw6IDM1LCBwb2ludHNOZXh0OiA3OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzk1MDAwMCwgbGV2ZWw6IDM2LCBwb2ludHNOZXh0OiA4NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODUyMDAwMCwgbGV2ZWw6IDM3LCBwb2ludHNOZXh0OiA5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTExMDAwMCwgbGV2ZWw6IDM4LCBwb2ludHNOZXh0OiA5NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTcyMDAwMCwgbGV2ZWw6IDM5LCBwb2ludHNOZXh0OiAxMDM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMzUwMDAwLCBsZXZlbDogNDAsIHBvaW50c05leHQ6IDExMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTEwMDAwMDAsIGxldmVsOiA0MSwgcG9pbnRzTmV4dDogMTE2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTY3MDAwMCwgbGV2ZWw6IDQyLCBwb2ludHNOZXh0OiAxMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMzYwMDAwLCBsZXZlbDogNDMsIHBvaW50c05leHQ6IDEzMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMwNzAwMDAsIGxldmVsOiA0NCwgcG9pbnRzTmV4dDogMTM4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzgwMDAwMCwgbGV2ZWw6IDQ1LCBwb2ludHNOZXh0OiAxNDU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE0NTUwMDAwLCBsZXZlbDogNDYsIHBvaW50c05leHQ6IDE1MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUzMjAwMDAsIGxldmVsOiA0NywgcG9pbnRzTmV4dDogMTYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjExMDAwMCwgbGV2ZWw6IDQ4LCBwb2ludHNOZXh0OiAxNjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2OTIwMDAwLCBsZXZlbDogNDksIHBvaW50c05leHQ6IDE3NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTc3NTAwMDAsIGxldmVsOiA1MCwgcG9pbnRzTmV4dDogMTg2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODYwMDAwMCwgbGV2ZWw6IDUxLCBwb2ludHNOZXh0OiAxOTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE5NDcwMDAwLCBsZXZlbDogNTIsIHBvaW50c05leHQ6IDIwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjAzNjAwMDAsIGxldmVsOiA1MywgcG9pbnRzTmV4dDogMjEyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMTI3MDAwMCwgbGV2ZWw6IDU0LCBwb2ludHNOZXh0OiAyMjIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIyMjAwMDAwLCBsZXZlbDogNTUsIHBvaW50c05leHQ6IDIzMTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMxNTAwMDAsIGxldmVsOiA1NiwgcG9pbnRzTmV4dDogMjQxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNDEyMDAwMCwgbGV2ZWw6IDU3LCBwb2ludHNOZXh0OiAyNTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI1MTEwMDAwLCBsZXZlbDogNTgsIHBvaW50c05leHQ6IDI2MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjYxMjAwMDAsIGxldmVsOiA1OSwgcG9pbnRzTmV4dDogMjcxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNzE1MDAwMCwgbGV2ZWw6IDYwLCBwb2ludHNOZXh0OiAyODIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI4MjAwMDAwLCBsZXZlbDogNjEsIHBvaW50c05leHQ6IDI5MjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjkyNzAwMDAsIGxldmVsOiA2MiwgcG9pbnRzTmV4dDogMzAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDM2MDAwMCwgbGV2ZWw6IDYzLCBwb2ludHNOZXh0OiAzMTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMxNDcwMDAwLCBsZXZlbDogNjQsIHBvaW50c05leHQ6IDMyNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzI2MDAwMDAsIGxldmVsOiA2NSwgcG9pbnRzTmV4dDogMzM3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzc1MDAwMCwgbGV2ZWw6IDY2LCBwb2ludHNOZXh0OiAzNDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM0OTIwMDAwLCBsZXZlbDogNjcsIHBvaW50c05leHQ6IDM2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzYxMTAwMDAsIGxldmVsOiA2OCwgcG9pbnRzTmV4dDogMzczMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzMyMDAwMCwgbGV2ZWw6IDY5LCBwb2ludHNOZXh0OiAzODU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4NTUwMDAwLCBsZXZlbDogNzAsIHBvaW50c05leHQ6IDM5ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzk4MDAwMDAsIGxldmVsOiA3MSwgcG9pbnRzTmV4dDogNDEwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTA3MDAwMCwgbGV2ZWw6IDcyLCBwb2ludHNOZXh0OiA0MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQyMzYwMDAwLCBsZXZlbDogNzMsIHBvaW50c05leHQ6IDQzNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDM2NzAwMDAsIGxldmVsOiA3NCwgcG9pbnRzTmV4dDogNDUwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTAwMDAwMCwgbGV2ZWw6IDc1LCBwb2ludHNOZXh0OiA0NjM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ2MzUwMDAwLCBsZXZlbDogNzYsIHBvaW50c05leHQ6IDQ3NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDc3MjAwMDAsIGxldmVsOiA3NywgcG9pbnRzTmV4dDogNDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTExMDAwMCwgbGV2ZWw6IDc4LCBwb2ludHNOZXh0OiA1MDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwNTIwMDAwLCBsZXZlbDogNzksIHBvaW50c05leHQ6IDUxOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTE5NTAwMDAsIGxldmVsOiA4MCwgcG9pbnRzTmV4dDogNTM0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MzQwMDAwMCwgbGV2ZWw6IDgxLCBwb2ludHNOZXh0OiA1NDg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0ODcwMDAwLCBsZXZlbDogODIsIHBvaW50c05leHQ6IDU2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTYzNjAwMDAsIGxldmVsOiA4MywgcG9pbnRzTmV4dDogNTc4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1Nzg3MDAwMCwgbGV2ZWw6IDg0LCBwb2ludHNOZXh0OiA1OTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU5NDAwMDAwLCBsZXZlbDogODUsIHBvaW50c05leHQ6IDYwOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjA5NTAwMDAsIGxldmVsOiA4NiwgcG9pbnRzTmV4dDogNjI1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MjUyMDAwMCwgbGV2ZWw6IDg3LCBwb2ludHNOZXh0OiA2NDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY0MTEwMDAwLCBsZXZlbDogODgsIHBvaW50c05leHQ6IDY1NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjU3MjAwMDAsIGxldmVsOiA4OSwgcG9pbnRzTmV4dDogNjczNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NzM1MDAwMCwgbGV2ZWw6IDkwLCBwb2ludHNOZXh0OiA2OTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY5MDAwMDAwLCBsZXZlbDogOTEsIHBvaW50c05leHQ6IDcwNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzA2NzAwMDAsIGxldmVsOiA5MiwgcG9pbnRzTmV4dDogNzIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MjM2MDAwMCwgbGV2ZWw6IDkzLCBwb2ludHNOZXh0OiA3NDA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDcwMDAwLCBsZXZlbDogOTQsIHBvaW50c05leHQ6IDc1ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzU4MDAwMDAsIGxldmVsOiA5NSwgcG9pbnRzTmV4dDogNzc1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NzU1MDAwMCwgbGV2ZWw6IDk2LCBwb2ludHNOZXh0OiA3OTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5MzIwMDAwLCBsZXZlbDogOTcsIHBvaW50c05leHQ6IDgxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODExMTAwMDAsIGxldmVsOiA5OCwgcG9pbnRzTmV4dDogODI5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MjkyMDAwMCwgbGV2ZWw6IDk5LCBwb2ludHNOZXh0OiA4NDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg0NzUwMDAwLCBsZXZlbDogMTAwLCBwb2ludHNOZXh0OiA4NjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg2NjAwMDAwLCBsZXZlbDogMTAxLCBwb2ludHNOZXh0OiA4ODQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg4NDcwMDAwLCBsZXZlbDogMTAyLCBwb2ludHNOZXh0OiA5MDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkwMzYwMDAwLCBsZXZlbDogMTAzLCBwb2ludHNOZXh0OiA5MjI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMjcwMDAwLCBsZXZlbDogMTA0LCBwb2ludHNOZXh0OiA5NDIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk0MjAwMDAwLCBsZXZlbDogMTA1LCBwb2ludHNOZXh0OiA5NjE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk2MTUwMDAwLCBsZXZlbDogMTA2LCBwb2ludHNOZXh0OiA5ODEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk4MTIwMDAwLCBsZXZlbDogMTA3LCBwb2ludHNOZXh0OiAxMDAxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAxMTAwMDAsIGxldmVsOiAxMDgsIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMjEyMDAwMCwgbGV2ZWw6IDEwOSwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTA0MTUwMDAwLCBsZXZlbDogMTEwLCBwb2ludHNOZXh0OiAxMDYxNTAwMDAgfSxcclxuICBdO1xyXG4gIFxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRMZXZlbEZvclBvaW50cyhwb2ludHM6IG51bWJlcik6IExldmVsRGF0YSB7XHJcbiAgICBsZXQgbGV2ZWwgOkxldmVsRGF0YSA9IGxldmVsRGF0YVswXTtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHBvaW50cyA+PSBkYXRhLnBvaW50cykge1xyXG4gICAgICAgIGxldmVsID0gZGF0YTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxldmVsO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c1BvaW50c0ZvckxldmVsKHRhcmdldExldmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHN0YXR1c1BvaW50cyA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmICh0YXJnZXRMZXZlbCA9PSBkYXRhLmxldmVsICYmIHN0YXR1c1BvaW50cyA9PSAwKSB7XHJcbiAgICAgICAgc3RhdHVzUG9pbnRzID0gZGF0YS5wb2ludHM7XHJcbiAgICAgIH0gXHJcbiAgICB9XHJcblxyXG5cdFx0XHJcblx0XHRyZXR1cm4gc3RhdHVzUG9pbnRzXHJcbiAgfVxyXG4gIFxyXG5cclxuLypcclxuY29uc3QgcG9pbnRzID0gNTUwMDtcclxuY29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhwb2ludHMpO1xyXG5jb25zb2xlLmxvZyhgV2l0aCAke3BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsfS5gKTtcclxuKi8iLCAiY29uc3QgbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2U6IHN0cmluZ1tdID0gW1xyXG5cdFwiU2V2ZW4gZGF5cyBvZiBub3RlLXRha2luZz8gWW91J3JlIHByYWN0aWNhbGx5IGEgbm90ZSBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBmaWVzdGEhIFx1RDgzQ1x1REY4OVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBwYXJ0eSBnb2luZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0gWW91J3JlIGxpa2UgdGhlIEphbWVzIEJvbmQgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REQ3Nlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzZWNyZXQgYWdlbnQhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhICdOb3RlLUEtRGF5JyBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXBlcyBvcHRpb25hbCFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3ZlIHByYWN0aWNhbGx5IHdyaXR0ZW4gYSBtaW5pIG5vdmVsIGJ5IG5vdyEgXHVEODNEXHVEQ0RBXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGF1dGhvciBzdGF0dXMgYWNoaWV2ZWQhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFVzYWluIEJvbHQgb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzcHJpbnRpbmcgdG93YXJkcyBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc3ByZWUhIEl0J3MgbGlrZSBhIG5vdGVzLXBsb3Npb24hIFx1RDgzRFx1RENBNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBmaXJld29ya3MgY29taW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYmFzaWNhbGx5IHRoZSBNaWNoYWVsIEpvcmRhbiBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNsYW0gZHVuayFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNVlAhIFx1RDgzQ1x1REZDNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNjb3JpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgJ1NldmVuIERheSBOb3RlIEZldmVyJyBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhdGNoIHRoZSBmZXZlciFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGphbW1pbichXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgbWFnaWMgc2hvdyEgTm93IHlvdSBzZWUgdGhlIG5vdGVzLCBub3cgeW91IGRvbid0ISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cywga2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBsaWtlIGEgbm90ZS10YWtpbmcgSmVkaSBNYXN0ZXIhIFx1RDgzQ1x1REYwQ1x1MjY5NFx1RkUwRiBbWF0gcG9pbnRzLCBtYXkgdGhlIG5vdGVzIGJlIHdpdGggeW91IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNYWNHeXZlciwgdHVybmluZyBpbmZvcm1hdGlvbiBpbnRvIHNvbHV0aW9ucyEgXHVEODNEXHVERDI3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY3JhZnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBjaGVmLCBjb29raW5nIHVwIGEga25vd2xlZGdlIGZlYXN0ISBcdUQ4M0NcdURGNzNcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjb29raW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQwXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTGV3aXMgYW5kIENsYXJrLCBjaGFydGluZyBuZXcgdGVycml0b3JpZXMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURERkFcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGRldGVjdGl2ZSwgc29sdmluZyBjYXNlcyBvZiBjdXJpb3NpdHkhIFx1RDgzRFx1REQ3NVx1RkUwRlx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGRldGVjdGluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHBpb25lZXIsIGJsYXppbmcgdHJhaWxzIHRocm91Z2ggdGhlIGZvcmVzdHMgb2YgaW5mb3JtYXRpb24hIFx1RDgzQ1x1REYzMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBpb25lZXJpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCJcclxuXTtcclxuXHJcbmNvbnN0IHR3b05vdGVNZXNzYWdlczogc3RyaW5nW10gPSBbXHJcblx0XCJCb29tISBZb3UganVzdCBhY2VkIHRoZSAyLW5vdGUgdGFuZ28hIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgZ3Jvb3ZpbichXCIsXHJcblx0XCJUd28gbm90ZXMgaW4gYSBkYXk/IFlvdSdyZSBvZmZpY2lhbGx5IGEgTm90ZSBOaW5qYSEgXHVEODNFXHVERDRCIFtYXSBwb2ludHMgZWFybmVkLiBSb2NrIG9uIVwiLFxyXG5cdFwiSGlnaC1maXZlISBZb3UndmUgY29ucXVlcmVkIHRoZSAyLW5vdGUgcm9kZW8hIFx1RDgzRVx1REQyMCBbWF0gcG9pbnRzIGVhcm5lZC4gWWVlaGF3IVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUhIFR3byBub3RlcyBpbiBvbmUgZGF5LCB5b3UgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgVHdvIG5vdGVzIGluIGEgZGF5IC0gd2hhdCdzIHlvdXIgc2VjcmV0IHdlYXBvbj8gXHVEODNEXHVERDI1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJLYWJvb20hIFlvdSBqdXN0IGJsZXcgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSB3YXRlciEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhIDItbm90ZSBzdXBlcnN0YXIhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGluIHRoZSBiYWcuIEtlZXAgc2hpbmluZyFcIixcclxuXHRcIkRvdWJsZSB1cCwgZG91YmxlIGRvd24hIFR3byBub3RlcyBpbiBvbmUgZGF5IC0geW91J3JlIGEgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgcGFydHkhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiS2EtY2hpbmchIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIHJhY2tpbmcgdXAgdGhvc2UgcG9pbnRzISBcdUQ4M0RcdURDQjAgW1hdIGVhcm5lZCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWdpY2lhbiEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHRyaWNrP1wiLFxyXG5cdFwiVHdvIG5vdGVzPyBOYWlsZWQgaXQhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCBnb2luZyFcIixcclxuXHRcIkFicmEtY2FkYWJyYSEgVHdvIG5vdGVzIGFwcGVhciEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlLCBkb3VibGUgdGhlIGZ1biEgVHdvIG5vdGVzIGluIG9uZSBkYXkhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgZmllc3RhISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYXBvdyEgVHdvIG5vdGVzIGluIGEgZGF5IC0geW91J3JlIGEgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEYgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBhZHZlbnR1cmU/XCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCJcclxuXTtcclxuXHJcbmNvbnN0IHJhbmRvbVBvaW50Tm90aWNlczogc3RyaW5nW10gPSBbXHJcblx0XCJCYXppbmdhISBZb3UganVzdCBzbmFnZ2VkIFtYXSBwb2ludHMhXCIsXHJcblx0XCJLYWJvb20hIFtYXSBwb2ludHMgYXJlIG5vdyBpbiB5b3VyIHBvY2tldCFcIixcclxuXHRcIldvb2hvbyEgW1hdIHBvaW50cyBlYXJuZWQhIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJQb2ludHMgYWhveSEgW1hdIG1vcmUgaW4gdGhlIGJhbmshXCIsXHJcblx0XCJTY29yZSEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHRvdGFsIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlppcHBpdHktemFwISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJDaGFtcGlvbiBtb3ZlISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIkJpbmdvISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIlNoYXphbSEgW1hdIHBvaW50cyB0byB0aGUgcmVzY3VlIVwiLFxyXG5cdFwiS2EtY2hpbmchIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkJyYXZvISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJXZWxsIGRvbmUhIFtYXSBtb3JlIHBvaW50cyBpbiB0b3chXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMsIGp1c3QgbGlrZSB0aGF0IVwiLFxyXG5cdFwiQSByb3VuZCBvZiBhcHBsYXVzZSBmb3IgW1hdIHBvaW50cyFcIixcclxuXHRcIldob29zaCEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJXb28hIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJHcmVhdCBqb2IhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiRmFudGFzdGljISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJIb29yYXkhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiTmljZSBvbmUhIFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldCFcIixcclxuXHRcIldvb3Qgd29vdCEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQmFtISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJDb29sIGJlYW5zISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIlNwbGVuZGlkISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJNYXJ2ZWxvdXMhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFueSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiRXhxdWlzaXRlISBbWF0gcG9pbnRzIGluIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJPdXRzdGFuZGluZyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugam9iIVwiLFxyXG5cdFwiTWFnbmlmaWNlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJUZXJyaWZpYyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiRXhjZWxsZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJBd2Vzb21lISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJXZWxsIHBsYXllZCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIkltcHJlc3NpdmUhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCcmlsbGlhbnQhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk5pY2UgbW92ZSEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiU3RlbGxhciEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJXZWxsIGRlc2VydmVkISBbWF0gcG9pbnRzIGVhcm5lZCFcIlxyXG5dO1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlVHdvTm90ZUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0d29Ob3RlTWVzc2FnZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gdHdvTm90ZU1lc3NhZ2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlUG9pbnRzKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHJhbmRvbVBvaW50Tm90aWNlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSByYW5kb21Qb2ludE5vdGljZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG4vLyBFeGFtcGxlIHVzYWdlXHJcbi8vIGNvbnN0IHJhbmRvbVBvaW50cyA9IDEwMDsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIHBvaW50cyB2YWx1ZVxyXG4vLyBjb25zdCByYW5kb21NZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShyYW5kb21Qb2ludHMpO1xyXG4vLyBjb25zb2xlLmxvZyhyYW5kb21NZXNzYWdlKTtcclxuXHJcblxyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFBLG1CQUFxRTs7O0FDQXJFLHNCQUErQztBQUd4QyxJQUFNLGtCQUFzQztBQUFBLEVBQ2pELG1CQUFtQjtBQUFBLEVBQ25CLFdBQVc7QUFBQSxFQUNYLFNBQVM7QUFBQSxFQUNULGdCQUFnQjtBQUFBLEVBQ2hC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UyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLElBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsS0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3RELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUN6RDtBQUVPLFNBQVMsa0JBQWtCLFFBQTJCO0FBQzNELE1BQUksUUFBbUIsVUFBVSxDQUFDO0FBQ2xDLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksVUFBVSxLQUFLLFFBQVE7QUFDekIsY0FBUTtBQUFBLElBQ1YsT0FBTztBQUNMO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLHFCQUFxQixhQUE2QjtBQUNoRSxNQUFJLGVBQWU7QUFDbkIsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxlQUFlLEtBQUssU0FBUyxnQkFBZ0IsR0FBRztBQUNsRCxxQkFBZSxLQUFLO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBR0YsU0FBTztBQUNQOzs7QUM5SUYsSUFBTSwwQkFBb0M7QUFBQSxFQUN6QztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0sa0JBQTRCO0FBQUEsRUFDakM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0scUJBQStCO0FBQUEsRUFDcEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFHTyxTQUFTLGdDQUFnQyxRQUF3QjtBQUN2RSxRQUFNLGNBQWMsS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLHdCQUF3QixNQUFNO0FBQzdFLFFBQU0sVUFBVSx3QkFBd0IsV0FBVztBQUNuRCxTQUFPLFFBQVEsUUFBUSxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ2hEO0FBR08sU0FBUyxpQ0FBaUMsUUFBd0I7QUFDeEUsUUFBTSxjQUFjLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSxnQkFBZ0IsTUFBTTtBQUNyRSxRQUFNLFVBQVUsZ0JBQWdCLFdBQVc7QUFDM0MsU0FBTyxRQUFRLFFBQVEsT0FBTyxPQUFPLFNBQVMsQ0FBQztBQUNoRDtBQUdPLFNBQVMsdUJBQXVCLFFBQXdCO0FBQzlELFFBQU0sY0FBYyxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksbUJBQW1CLE1BQU07QUFDeEUsUUFBTSxVQUFVLG1CQUFtQixXQUFXO0FBQzlDLFNBQU8sUUFBUSxRQUFRLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDaEQ7OztBM0NsSkEsSUFBcUIsZUFBckIsY0FBMEMsd0JBQU87QUFBQSxFQUFqRDtBQUFBO0FBSUMsU0FBUSxnQkFBZ0IsS0FBSyxpQkFBaUI7QUFDOUMsU0FBUSx3QkFBd0IsS0FBSyxjQUFjLFNBQVMsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQUE7QUFBQSxFQUVoRixNQUFNLFNBQVM7QUFDZCxZQUFRLElBQUksbUNBQW1DO0FBRS9DLFVBQU0sS0FBSyxhQUFhO0FBRXhCLFNBQUssY0FBYyxJQUFJLDJCQUEyQixLQUFLLEtBQUssSUFBSSxDQUFDO0FBR2pFLGVBQVcsWUFBWTtBQUV0QixZQUFNLEtBQUssZ0JBQWdCO0FBQUEsSUFDNUIsR0FBRyxHQUFJO0FBSVAsU0FBSyxnQkFBZ0IsS0FBSyxLQUFLO0FBQy9CLFNBQUssVUFBVSxPQUFPLFlBQVksS0FBSyxnQkFBZ0IsS0FBSyxJQUFJLEdBQUcsS0FBSyxhQUFhO0FBRXJGLFVBQU0sS0FBSyxnQkFBZ0IsS0FBSyxxQkFBcUI7QUFHckQsUUFBSSxLQUFLLFNBQVMsT0FBTTtBQUN2QixXQUFLLGNBQWMsaUJBQWlCLDBCQUEwQixZQUFZO0FBMEJ6RSxjQUFNLEtBQUssYUFBYTtBQUN4QixjQUFNLEtBQUssaUJBQWlCLEtBQUssU0FBUyxjQUFjO0FBR3hELGNBQU0sS0FBSyxnQkFBZ0I7QUFBQSxNQUc1QixDQUFDO0FBQUEsSUFDRjtBQUdBLFNBQUssY0FBYyxVQUFVLDJCQUEyQixZQUFZO0FBRW5FLFlBQU0sS0FBSyxzQkFBc0I7QUFBQSxJQUNsQyxDQUFDO0FBR0QsUUFBSSxLQUFLLFNBQVMsbUJBQWtCO0FBRW5DLFdBQUssV0FBVztBQUFBLFFBQ2YsSUFBSTtBQUFBLFFBQ0osTUFBTTtBQUFBLFFBQ04sVUFBVSxZQUFZO0FBQ3JCLGdCQUFNLEtBQUssZUFBZSxLQUFLLHFCQUFxQjtBQUFBLFFBQ3JEO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUVBLFFBQUksS0FBSyxTQUFTLG1CQUFrQjtBQUVuQyxXQUFLLFdBQVc7QUFBQSxRQUNmLElBQUk7QUFBQSxRQUNKLE1BQU07QUFBQSxRQUNOLFVBQVUsWUFBWTtBQUNyQixnQkFBTSxFQUFFLE1BQU0sSUFBSSxLQUFLO0FBQ3ZCLGdCQUFNLGlCQUFpQixLQUFLLEtBQUssS0FBSyxTQUFTLGNBQWM7QUFDN0QsZ0JBQU0sY0FBYyxNQUFNLEtBQUssWUFBWSxLQUFLO0FBQ2hELGdCQUFNLG9CQUFvQixLQUFLLFNBQVMsZ0JBQWdCLFdBQVc7QUFBQSxRQUNwRTtBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0Y7QUFHQSxRQUFJLEtBQUssU0FBUyxtQkFBbUI7QUFFcEMsV0FBSyxXQUFXO0FBQUEsUUFDZixJQUFJO0FBQUEsUUFDSixNQUFNO0FBQUEsUUFDTixVQUFVLFlBQVk7QUFDTixnQkFBTSxLQUFLLFVBQVU7QUFBQSxRQUN6QjtBQUFBLE1BRWIsQ0FBQztBQUFBLElBQ0Y7QUFHQSxTQUFLLFdBQVc7QUFBQSxNQUNmLElBQUk7QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFVBQVUsWUFBWTtBQUNyQixjQUFNLEVBQUUsTUFBTSxJQUFJO0FBQ2xCLGNBQU0sY0FBYyxNQUFNLEtBQUssWUFBWSxLQUFLO0FBQ2hELGNBQU0sb0JBQW9CLEtBQUssU0FBUyxnQkFBZ0IsV0FBVztBQUFBLE1BQ3BFO0FBQUEsSUFDRCxDQUFDO0FBSUQsU0FBSyxXQUFXO0FBQUEsTUFDZixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixVQUFVLFlBQVk7QUFDckIsY0FBTSxLQUFLLHNCQUFzQjtBQUFBLE1BQ2xDO0FBQUEsSUFDRCxDQUFDO0FBSUQsU0FBSyxXQUFXO0FBQUEsTUFDZixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixVQUFVLFlBQVk7QUFDckIsY0FBTSxxQkFBcUIsS0FBSyxTQUFTLHNCQUFzQixLQUFLLFNBQVMsb0JBQW9CO0FBQUEsTUFDbEc7QUFBQSxJQUNELENBQUM7QUFBQSxFQUVGO0FBQUEsRUFHRyxNQUFjLFlBQVk7QUFDdEIsVUFBTSxLQUFLLDBCQUEwQjtBQUNyQyxTQUFLLFNBQVMsY0FBYztBQUM1QixTQUFLLFNBQVMsZUFBZTtBQUM3QixTQUFLLFNBQVMsaUJBQWlCO0FBQy9CLFNBQUssU0FBUyxvQkFBb0I7QUFDbEMsU0FBSyxTQUFTLHFCQUFxQjtBQUNuQyxVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFDakMsVUFBTSxLQUFLLGlCQUFpQixDQUFDO0FBQzdCLFVBQU0sS0FBSyxnQkFBZ0IsS0FBSyxxQkFBcUI7QUFDckQsUUFBSSxvQkFBb0IsS0FBSyxLQUFLLHlEQUF5RCxLQUFLLFNBQVMsOEJBQThCLEVBQUUsS0FBSztBQUFBLEVBQ2xKO0FBQUEsRUFFQSxNQUFjLGVBQWUsdUJBQXdDO0FBQ3ZFLFNBQUssU0FBUyx3QkFBd0IsT0FBTyxJQUFJLEtBQUssR0FBRyxZQUFZO0FBQ3JFLFVBQU0sS0FBSyxhQUFhO0FBRXhCLFVBQU0sRUFBQyxNQUFLLElBQUksS0FBSztBQUNyQixVQUFNLGlCQUFpQixLQUFLLEtBQUssS0FBSyxTQUFTLGNBQWM7QUFDN0QsVUFBTSxjQUFjLE1BQU0sS0FBSyxZQUFZLEtBQUs7QUFDaEQsVUFBTSxvQkFBb0IsS0FBSyxTQUFTLGdCQUFnQixXQUFXO0FBQ25FLFVBQU0sS0FBSyxlQUFlO0FBQzFCLFVBQU0sZUFBd0IsTUFBTSxXQUFXLEtBQUssS0FBSyxLQUFLLFNBQVMsYUFBYSxLQUFLLFNBQVMsYUFBYTtBQUMvRyxZQUFRLElBQUkseUNBQXlDLGFBQWEsUUFBUTtBQUUxRSxRQUFJLGlCQUFpQjtBQUVyQixlQUFXLFlBQVksY0FBYztBQUNwQyxZQUFNLE9BQU87QUFDYixZQUFNLGVBQWUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQzlDLFlBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFDdEUsVUFBSSxjQUFjLFdBQVcsUUFBUSxXQUFXLEtBQUssU0FBUyxLQUFLLE1BQU07QUFDeEUsZ0JBQVEsS0FBSyxRQUFRLEtBQUssbUNBQW1DO0FBQzdEO0FBQUEsTUFDRDtBQUVBLFlBQU0sYUFBYSw0QkFBNEIsY0FBYyxTQUFTLFFBQVE7QUFDOUUsWUFBTSxpQkFBaUIsZUFBZSxVQUFVO0FBQ2hELFlBQU07QUFBQSxRQUNMO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNELElBQUksK0JBQStCLGNBQWMsU0FBUyxVQUFVLEtBQUssU0FBUyxzQkFBc0IsS0FBSyxTQUFTLG9CQUFvQjtBQUMxSSxZQUFNLHFCQUE2Qiw2QkFBNkIsV0FBVyxrQkFBa0IsU0FBUztBQUN0RyxZQUFNLGVBQWUsbUJBQW1CLEtBQUssSUFBSTtBQUNqRCxZQUFNLGVBQWUsY0FBYyxJQUFJO0FBQ3ZDLFlBQU0sY0FBYyxZQUFZLFlBQVk7QUFDNUMsWUFBTSxVQUFVLGFBQWEsb0JBQW9CLElBQUksQ0FBQztBQUN0RCxZQUFNLGVBQWUsb0JBQW9CLGdCQUFnQixjQUFjLGFBQWEsU0FBUyxrQkFBa0I7QUFHL0csY0FBUSxJQUFJLG1CQUFtQixTQUFTLG9CQUFvQixTQUFTLE1BQU07QUFFM0UsVUFBSTtBQUNILGNBQU0sS0FBSyxJQUFJLFlBQVksbUJBQW1CLE1BQU0sQ0FBQyxnQkFBZ0I7QUFDcEUsY0FBSSw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsWUFBWSxLQUFLLEdBQUc7QUFDbEYsOEJBQWtCLHFCQUFxQiw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsWUFBWTtBQUM5RyxpQkFBSyxpQkFBaUIscUJBQXFCLDZCQUE2QixnQ0FBZ0MsWUFBWSxDQUFDO0FBQUEsVUFDdEgsV0FBVyxFQUFFLG1CQUFtQixjQUFjO0FBQzdDLDhCQUFrQixxQkFBcUIsNkJBQTZCLEtBQUssWUFBWTtBQUNyRixpQkFBSyxpQkFBaUIscUJBQXFCLDZCQUE2QixLQUFLLFlBQVksQ0FBQztBQUFBLFVBQzNGO0FBRUEsY0FBSSw2QkFBNkIsWUFBWSxhQUFhLEdBQUcsWUFBWSxLQUFLLEtBQUssaUJBQWlCLGFBQWE7QUFDaEgsOEJBQWtCLGlCQUFpQiw2QkFBNkIsWUFBWSxhQUFhLEdBQUcsWUFBWTtBQUN4RyxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFBQSxVQUM5RyxXQUFXLEVBQUUsaUJBQWlCLGNBQWM7QUFDM0MsOEJBQWtCLGlCQUFpQiw2QkFBNkIsS0FBSyxZQUFZO0FBQ2pGLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssWUFBWSxDQUFDO0FBQUEsVUFDdkY7QUFFQSxjQUFJLDZCQUE2QixZQUFZLG1CQUFtQixHQUFHLGNBQWMsS0FBSyxHQUFHO0FBQ3hGLDhCQUFrQixpQkFBaUIsNkJBQTZCLFlBQVksbUJBQW1CLEdBQUcsY0FBYztBQUNoSCxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUFBLFVBQ3RILFdBQVcsRUFBRSx1QkFBdUIsY0FBYztBQUNqRCw4QkFBa0IsaUJBQWlCLDZCQUE2QixLQUFLLGNBQWM7QUFDbkYsaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxjQUFjLENBQUM7QUFBQSxVQUN6RjtBQUVBLGNBQUksNkJBQTZCLFlBQVksY0FBYyxHQUFHLFdBQVcsS0FBSyxHQUFHO0FBQ2hGLDhCQUFrQixpQkFBaUIsNkJBQTZCLFlBQVksY0FBYyxHQUFHLFdBQVc7QUFDeEcsaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsWUFBWSxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBQUEsVUFDOUcsV0FBVyxFQUFFLGtCQUFrQixjQUFjO0FBQzVDLDhCQUFrQixpQkFBaUIsNkJBQTZCLEtBQUssV0FBVztBQUNoRixpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixLQUFLLFdBQVcsQ0FBQztBQUFBLFVBQ3RGO0FBRUEsY0FBSSw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsT0FBTyxLQUFLLEdBQUc7QUFDN0UsOEJBQWtCLGlCQUFpQiw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsT0FBTztBQUNyRyxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFBQSxVQUMzRyxXQUFXLEVBQUUsbUJBQW1CLGNBQWM7QUFDN0MsOEJBQWtCLGlCQUFpQiw2QkFBNkIsS0FBSyxPQUFPO0FBQzVFLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssT0FBTyxDQUFDO0FBQUEsVUFDbEY7QUFFQSxjQUFJLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQixLQUFLLEdBQUc7QUFDN0csOEJBQWtCLGlCQUFpQiw2QkFBNkIsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0I7QUFDckksaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0IsQ0FBQztBQUFBLFVBQzNJLFdBQVcsRUFBRSx3Q0FBd0MsY0FBYztBQUNsRSw4QkFBa0IsaUJBQWlCLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQjtBQUNySSxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixLQUFLLGtCQUFrQixDQUFDO0FBQUEsVUFFN0Y7QUFHQSxlQUFLLGlCQUFpQixhQUFhLGNBQWMsZ0JBQWdCLGFBQWEsU0FBUyxvQkFBb0IsWUFBWTtBQUFBLFFBQ3hILENBQUM7QUFBQSxNQUNGLFNBQVNDLElBQVA7QUFDRCxhQUFJQSxNQUFBLGdCQUFBQSxHQUFHLFVBQVMsa0JBQWtCO0FBQ2pDLGdCQUFNLGVBQWUsZ0VBQWdFLEtBQUssUUFBUUEsR0FBRTtBQUNwRyxjQUFJLHdCQUFPLGNBQWMsR0FBSTtBQUM3QixrQkFBUSxNQUFNLFlBQVk7QUFBQSxRQUMzQjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQ0EsUUFBSSxpQkFBaUIsR0FBRztBQUN2QixVQUFJLGdCQUFnQjtBQUNwQixVQUFJLEtBQUssU0FBUyxtQkFBa0I7QUFDbkMsd0JBQWdCLEtBQUssU0FBUztBQUFBLE1BQy9CO0FBQ0EsVUFBSSx3QkFBTyxHQUFHLGlCQUFpQiwrQkFBK0I7QUFDOUQsY0FBUSxJQUFJLEdBQUcsaUJBQWlCLCtCQUErQjtBQUFBLElBQ2hFO0FBR0EsZUFBVyxZQUFZO0FBRXRCLFlBQU0sWUFBbUIscUJBQXFCLEtBQUssU0FBUyxXQUFXO0FBQ3ZFLFVBQUksd0JBQU8sc0JBQXNCLFVBQVUsZ0JBQWdCLFVBQVUsYUFBYTtBQUNsRixjQUFRLElBQUksY0FBYyxVQUFVLFVBQVUsVUFBVSxhQUFhO0FBQ3JFLFlBQU0sS0FBSyx1QkFBdUIsS0FBSyxTQUFTLGdCQUFnQixTQUFTO0FBQ3pFLFlBQU0sS0FBSyxnQ0FBZ0MsS0FBSyxTQUFTLGdCQUFnQixLQUFLLFNBQVMsV0FBVztBQUNsRyxZQUFNLEtBQUssZUFBZTtBQUMxQixZQUFNLEtBQUssZ0JBQWdCLHFCQUFxQjtBQUFBLElBQ2pELEdBQUcsR0FBSTtBQUVQLFFBQUksb0JBQW9CLEtBQUssS0FBSztBQUFBLDZCQUF3RTtBQUFBO0FBQUEsMkJBQXNELEtBQUssU0FBUztBQUFBO0FBQUEsZ0ZBQXVHLEVBQUUsS0FBSztBQUFBLEVBQzdSO0FBQUEsRUFFUSxpQkFBaUIsYUFBa0IsY0FBc0IsZ0JBQXdCLGFBQXFCLFNBQWlCLG9CQUE0QixjQUFzQjtBQUNoTCxnQkFBWSxhQUFhLElBQUksY0FBYyxZQUFZLGFBQWEsR0FBRyxZQUFZO0FBQ25GLGdCQUFZLG1CQUFtQixJQUFJLGNBQWMsWUFBWSxtQkFBbUIsR0FBRyxjQUFjO0FBQ2pHLGdCQUFZLGNBQWMsSUFBSSxjQUFjLFlBQVksY0FBYyxHQUFHLFdBQVc7QUFDcEYsZ0JBQVksZUFBZSxJQUFJLGNBQWMsWUFBWSxlQUFlLEdBQUcsT0FBTztBQUNsRixnQkFBWSxvQ0FBb0MsSUFBSSxjQUFjLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCO0FBQ3ZJLGdCQUFZLGVBQWUsSUFBSSxjQUFjLFlBQVksZUFBZSxHQUFHLFlBQVk7QUFBQSxFQUN4RjtBQUFBLEVBRUEsV0FBVztBQUNWLFlBQVEsSUFBSSxxQ0FBcUM7QUFHakQsUUFBSSxLQUFLLFlBQVksTUFBTTtBQUMxQixvQkFBYyxLQUFLLE9BQU87QUFDMUIsV0FBSyxVQUFVO0FBQUEsSUFDaEI7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLHdCQUF1QjtBQW5WOUI7QUFvVkUsVUFBTSxPQUFvQixLQUFLLElBQUksVUFBVSxjQUFjO0FBQzNELFFBQUksUUFBUSxNQUFNO0FBQ2pCLGNBQVEsTUFBTSxzQ0FBc0M7QUFBQSxJQUNyRDtBQUVBLFFBQUksK0JBQStCO0FBR25DLFVBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFDdEUsVUFBTSxlQUFlLHlDQUFZLE9BQU87QUFDeEMsVUFBTSxXQUFXLHlDQUFZLEtBQUs7QUFFbEMsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSxhQUFhO0FBQ2pCLFFBQUkscUJBQXFCO0FBRXpCLFFBQUksaUJBQWlCLFVBQWEsYUFBYSxRQUFXO0FBQ3pELG1CQUFhLDRCQUE0QixjQUFjLFFBQVE7QUFDL0QsdUJBQWlCLGVBQWUsVUFBVTtBQUcxQyxVQUFJLGlCQUFpQixRQUFRLGFBQWEsTUFBTTtBQUMvQyxjQUFNLEVBQUUsV0FBVyxrQkFBa0IsVUFBVSxJQUFJLCtCQUErQixjQUFjLFVBQVUsS0FBSyxTQUFTLHNCQUFzQixLQUFLLFNBQVMsb0JBQW9CO0FBQ2hMLDZCQUFxQiw2QkFBNkIsV0FBVyxrQkFBa0IsU0FBUztBQUFBLE1BQ3pGO0FBQUEsSUFDRDtBQUVBLFFBQUksZUFBZTtBQUNuQixRQUFJLGVBQWU7QUFDbkIsUUFBSSxjQUFjO0FBQ2xCLFFBQUksVUFBVTtBQUVkLFFBQUksU0FBUyxNQUFNO0FBQ2xCLHFCQUFlLG9CQUFtQixVQUFLLFNBQUwsWUFBYSxFQUFFO0FBQ2pELHFCQUFlLGNBQWMsSUFBSTtBQUNqQyxvQkFBYyxZQUFZLFlBQVk7QUFDdEMsZ0JBQVUsYUFBYSxvQkFBb0IsSUFBSSxDQUFDO0FBRWhELFlBQU0sZUFBZSxvQkFBb0IsZ0JBQWdCLGNBQWMsYUFBYSxTQUFTLGtCQUFrQjtBQUUvRyxVQUFJO0FBQ0gsY0FBTSxLQUFLLElBQUksWUFBWSxtQkFBbUIsTUFBTSxDQUFDLGdCQUFnQjtBQUNwRSxjQUFJLGFBQWE7QUFDaEIsZ0JBQUksaUJBQWlCO0FBQ3JCLGdCQUFJLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxZQUFZLEtBQUssR0FBRTtBQUNqRixzQkFBUSxJQUFJLG1CQUFtQjtBQUMvQixnQ0FBa0IscUJBQW1CLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxZQUFZO0FBQzVHLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIscUJBQXFCLDZCQUE2QixnQ0FBZ0MsWUFBWSxDQUFDO0FBQ3RJLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUIsV0FBVyxFQUFFLG1CQUFtQixjQUFhO0FBQzVDLGdDQUFrQixxQkFBbUIsNkJBQTZCLEtBQUssWUFBWTtBQUNuRixvQkFBTSxXQUFXLEtBQUssaUJBQWlCLHFCQUFxQiw2QkFBNkIsS0FBSyxZQUFZLENBQUM7QUFDM0csbUJBQUssZ0JBQWdCLFFBQVE7QUFDN0IsNkNBQStCO0FBQUEsWUFDaEM7QUFFQSxnQkFBSSw2QkFBNkIsWUFBWSxhQUFhLEdBQUcsWUFBWSxLQUFLLEtBQUssaUJBQWlCLGFBQVk7QUFDL0csZ0NBQWtCLGlCQUFlLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZO0FBQ3RHLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFDOUgsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFXLEVBQUUsaUJBQWlCLGNBQWE7QUFDMUMsZ0NBQWtCLGlCQUFlLDZCQUE2QixLQUFLLFlBQVk7QUFDL0Usb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssWUFBWSxDQUFDO0FBQ3ZHLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUI7QUFFQSxnQkFBSSw2QkFBNkIsWUFBWSxtQkFBbUIsR0FBRyxjQUFjLEtBQUssR0FBRTtBQUN2RixnQ0FBa0IsaUJBQWUsNkJBQTZCLFlBQVksbUJBQW1CLEdBQUcsY0FBYztBQUM5RyxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsWUFBWSxtQkFBbUIsR0FBRyxjQUFjLENBQUM7QUFDdEksbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFVLEVBQUUsdUJBQXVCLGNBQWE7QUFDL0MsZ0NBQWtCLGlCQUFlLDZCQUE2QixLQUFLLGNBQWM7QUFDakYsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssY0FBYyxDQUFDO0FBQ3pHLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUI7QUFFQSxnQkFBSSw2QkFBNkIsWUFBWSxjQUFjLEdBQUcsV0FBVyxLQUFLLEdBQUU7QUFDL0UsZ0NBQWtCLGlCQUFlLDZCQUE2QixZQUFZLGNBQWMsR0FBRyxXQUFXO0FBQ3RHLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGNBQWMsR0FBRyxXQUFXLENBQUM7QUFDOUgsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFVLEVBQUUsa0JBQWtCLGNBQWE7QUFDMUMsZ0NBQWtCLGlCQUFlLDZCQUE2QixLQUFLLFdBQVc7QUFDOUUsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssV0FBVyxDQUFDO0FBQ3RHLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUI7QUFFQSxnQkFBSSw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsT0FBTyxLQUFLLEdBQUU7QUFDNUUsZ0NBQWtCLGlCQUFlLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPO0FBQ25HLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFDM0gsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFVLEVBQUUsbUJBQW1CLGNBQWE7QUFDM0MsZ0NBQWtCLGlCQUFlLDZCQUE2QixLQUFLLE9BQU87QUFDMUUsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssT0FBTyxDQUFDO0FBQ2xHLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUI7QUFFQSxnQkFBSSw2QkFBNkIsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0IsS0FBSyxHQUFFO0FBQzVHLGdDQUFrQixpQkFBZSw2QkFBNkIsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0I7QUFDbkksb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCLENBQUM7QUFDM0osbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFVLEVBQUUsd0NBQXdDLGNBQWE7QUFDaEUsZ0NBQWtCLGlCQUFlLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQjtBQUNuSSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxrQkFBa0IsQ0FBQztBQUM3RyxtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCO0FBQ0Esb0JBQVEsSUFBSSxtQkFBbUIsZ0JBQWdCO0FBQy9DLGdCQUFJLGlCQUFpQixHQUFFO0FBQ3RCLG9CQUFNLGdCQUFnQix1QkFBdUIsa0JBQWtCLEtBQUssU0FBUyxxQkFBcUIsS0FBSyxTQUFTLGNBQWM7QUFDOUgsa0JBQUksd0JBQU8sYUFBYTtBQUN4QixzQkFBUSxJQUFJLGFBQWE7QUFBQSxZQUMxQjtBQUVBLGlCQUFLLGlCQUFpQixhQUFhLGNBQWMsZ0JBQWdCLGFBQWEsU0FBUyxvQkFBb0IsWUFBWTtBQUFBLFVBQ3hIO0FBQUEsUUFDRCxDQUFDO0FBQUEsTUFDRixTQUFTQSxJQUFQO0FBQ0QsYUFBSUEsTUFBQSxnQkFBQUEsR0FBRyxVQUFTLGtCQUFrQjtBQUNqQyxnQkFBTSxlQUFlLGdFQUFnRSxLQUFLLFFBQVFBLEdBQUU7QUFDcEcsY0FBSSx3QkFBTyxjQUFjLEdBQUk7QUFDN0Isa0JBQVEsTUFBTSxZQUFZO0FBQUEsUUFDM0I7QUFBQSxNQUNEO0FBQ0EsVUFBSSx3QkFBTyx3QkFBd0I7QUFDbkMsY0FBUSxJQUFJLHdCQUF3QjtBQUVwQyxZQUFNLEtBQUssZ0JBQWdCLEtBQUsscUJBQXFCO0FBQUEsSUFDdEQsT0FBTztBQUNOLGNBQVEsTUFBTSxzRUFBc0U7QUFBQSxJQUNyRjtBQUNBLFFBQUksOEJBQTZCO0FBQ2hDLFlBQU0sS0FBSyw4QkFBOEI7QUFDekMsWUFBTSxLQUFLLCtCQUErQjtBQUFBLElBQzNDO0FBQUEsRUFDRDtBQUFBLEVBR0EsTUFBTSxrQkFBaUI7QUFDdEIsUUFBSSxRQUFRO0FBQ1osUUFBRyxDQUFDLFVBQVUsT0FBTyxPQUFPLEtBQUssU0FBUyx1QkFBdUIsWUFBWSxDQUFDLEdBQUU7QUFDL0UsV0FBSyxTQUFTLHdCQUF3QjtBQUN0QyxXQUFLLFNBQVMsd0JBQXdCLE9BQU8sT0FBTyxFQUFFLE9BQU8sWUFBWTtBQUN6RSxZQUFNLEtBQUssYUFBYTtBQUN4QixjQUFRLElBQUkseUJBQXlCO0FBQ3JDLGNBQVE7QUFBQSxJQUNUO0FBQ0EsUUFBRyxDQUFDLGVBQWUsT0FBTyxPQUFPLEtBQUssU0FBUyx3QkFBd0IsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLE9BQU8sT0FBTyxLQUFLLFNBQVMsd0JBQXdCLFlBQVksQ0FBQyxHQUFFO0FBQ3RLLFdBQUssU0FBUyx5QkFBeUI7QUFDdkMsV0FBSyxTQUFTLHlCQUF5QixPQUFPLE9BQU8sRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLE9BQU8sWUFBWTtBQUM3RixXQUFLLHNCQUFzQixDQUFDO0FBQzVCLFdBQUssU0FBUyxvQkFBb0IsT0FBTyxPQUFPLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxPQUFPLFlBQVk7QUFDeEYsWUFBTSxLQUFLLGFBQWE7QUFDeEIsY0FBUSxJQUFJLDBCQUEwQjtBQUN0QyxjQUFRO0FBQUEsSUFDVDtBQUNBLFFBQUcsZUFBZSxPQUFPLE9BQU8sS0FBSyxTQUFTLHdCQUF3QixZQUFZLENBQUMsS0FBSyxLQUFLLFNBQVMsMEJBQTBCLEdBQUU7QUFDakksV0FBSyxTQUFTLHlCQUF5QjtBQUN2QyxXQUFLLFNBQVMseUJBQXlCLE9BQU8sT0FBTyxFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQUUsT0FBTyxZQUFZO0FBQzdGLFlBQU0sS0FBSyxhQUFhO0FBQ3hCLGNBQVE7QUFBQSxJQUNUO0FBQ0EsUUFBSSxPQUFNO0FBRVQsWUFBTSxLQUFLLGlCQUFpQixLQUFLLFNBQVMsY0FBYztBQUFBLElBQ3pEO0FBQUEsRUFFRDtBQUFBLEVBRUEsTUFBTSxnQ0FBK0I7QUFDcEMsUUFBSSwyQkFBMkIsS0FBSyxTQUFTO0FBQ3ZDLFFBQUksMkJBQTJCLEdBQUU7QUFDdEM7QUFDQSxXQUFLLFNBQVMsd0JBQXdCO0FBQ3RDLFlBQU0sS0FBSyxhQUFhO0FBRXhCLFVBQUcsNEJBQTRCLEdBQUU7QUFFaEMsY0FBTSxLQUFLLGlCQUFpQixLQUFLLFNBQVMsY0FBYztBQUN4RCxnQkFBUSxJQUFJLEdBQUcsaURBQWlEO0FBQUEsTUFDakUsV0FBVyw0QkFBNEIsR0FBRztBQUN6QyxhQUFLLHNCQUFzQixHQUFHO0FBQzlCLGFBQUssU0FBUyxvQkFBb0IsT0FBTyxPQUFPLEVBQUUsT0FBTyxZQUFZO0FBQ3JFLGNBQU0sS0FBSyxhQUFhO0FBQ3hCLGNBQU0sS0FBSyxpQkFBaUIsdUJBQXVCO0FBQ25ELGNBQU0sVUFBVSxpQ0FBaUMsMkJBQTJCLEtBQUssU0FBUyxxQkFBcUIsS0FBSyxTQUFTLGNBQWM7QUFDM0ksZ0JBQVEsSUFBSSw0QkFBNEIscUNBQXFDO0FBQzdFLFlBQUksd0JBQU8sT0FBTztBQUNsQixnQkFBUSxJQUFJLE9BQU87QUFBQSxNQUNwQixPQUFPO0FBRU4sZ0JBQVEsSUFBSSxHQUFHLGlEQUFpRDtBQUFBLE1BQ2pFO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUVBLE1BQU0saUNBQWdDO0FBQ3JDLFFBQUcsZUFBZSxPQUFPLE9BQU8sS0FBSyxTQUFTLHdCQUF3QixZQUFZLENBQUMsR0FBRTtBQUNwRixZQUFNLEtBQUssa0NBQWtDO0FBQUEsSUFDOUMsV0FBVyxVQUFVLE9BQU8sT0FBTyxLQUFLLFNBQVMsd0JBQXdCLFlBQVksQ0FBQyxHQUFFO0FBRXZGLGNBQVEsSUFBSSw4Q0FBOEM7QUFBQSxJQUMzRCxPQUFPO0FBQ04sV0FBSyxTQUFTLHlCQUF5QixPQUFPLE9BQU8sRUFBRSxPQUFPLFlBQVk7QUFDMUUsV0FBSyxTQUFTLHlCQUF5QjtBQUN2QyxZQUFNLEtBQUssYUFBYTtBQUFBLElBQ3pCO0FBQUEsRUFDRDtBQUFBLEVBRUEsTUFBYyxvQ0FBb0M7QUFDakQsUUFBSSw0QkFBNEIsS0FBSyxTQUFTO0FBQzlDLFFBQUksNEJBQTRCLEdBQUc7QUFDbEM7QUFDQSxXQUFLLFNBQVMseUJBQXlCLE9BQU8sT0FBTyxFQUFFLE9BQU8sWUFBWTtBQUMxRSxXQUFLLFNBQVMseUJBQXlCO0FBQ3ZDLFlBQU0sS0FBSyxhQUFhO0FBRXhCLFlBQU0sS0FBSyxzQ0FBc0MseUJBQXlCO0FBQUEsSUFDM0U7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFjLHNDQUFzQywyQkFBbUM7QUFDdEYsUUFBSSw2QkFBNkIsR0FBRztBQUVuQyxZQUFNLEtBQUssaUJBQWlCLEtBQUssU0FBUyxjQUFjO0FBQ3hELGNBQVEsSUFBSSxHQUFHLHVEQUF1RDtBQUFBLElBQ3ZFLFdBQVcsNkJBQTZCLEdBQUc7QUFDMUMsV0FBSyxzQkFBc0IsQ0FBQztBQUM1QixXQUFLLFNBQVMsb0JBQW9CLE9BQU8sT0FBTyxFQUFFLE9BQU8sWUFBWTtBQUNyRSxZQUFNLEtBQUssYUFBYTtBQUN4QixZQUFNLEtBQUssaUJBQWlCLHdCQUF3QjtBQUNwRCxjQUFRLElBQUksNkJBQTZCLGlEQUFpRDtBQUMxRixZQUFNLFVBQVUsZ0NBQWdDLDRCQUE0QixLQUFLLFNBQVMscUJBQXFCLEtBQUssU0FBUyxjQUFjO0FBQzNJLFVBQUksd0JBQU8sT0FBTztBQUNsQixjQUFRLElBQUksT0FBTztBQUFBLElBQ3BCLE9BQU87QUFFTixjQUFRLElBQUksR0FBRyx1REFBdUQ7QUFBQSxJQUN2RTtBQUFBLEVBQ0Q7QUFBQSxFQUVBLE1BQU0sZ0JBQWdCLFdBQTJCO0FBQ2hELFVBQU0sZUFBZSxrQkFBa0IsS0FBSyxTQUFTLFlBQVk7QUFDakUsVUFBTSxzQkFBc0IsS0FBSyxTQUFTLGVBQWUsYUFBYSxXQUFTLGFBQWEsYUFBYSxhQUFhLFVBQVE7QUFDOUgsVUFBTSxxQkFBcUI7QUFDM0IsVUFBTSxZQUFZLEtBQUssTUFBTSxxQkFBcUIsa0JBQWtCO0FBQ3BFLGNBQVUsUUFBUSxrQkFBVyxLQUFLLFNBQVMsaUJBQWlCLEtBQUssa0JBQWtCLG9CQUFvQixTQUFTLEdBQUc7QUFBQSxFQUNwSDtBQUFBLEVBRVEsa0JBQWtCLG9CQUE0QixXQUFtQjtBQUN4RSxRQUFJLGNBQWM7QUFDbEIsYUFBU0MsS0FBSSxHQUFHQSxNQUFLLG9CQUFvQkEsTUFBSztBQUM3QyxVQUFJQSxNQUFLLFdBQVc7QUFDbkIsdUJBQWU7QUFBQSxNQUNoQixPQUFPO0FBQ04sdUJBQWU7QUFBQSxNQUNoQjtBQUFBLElBQ0Q7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsTUFBTSxlQUFlO0FBQ3BCLFNBQUssV0FBVyxPQUFPLE9BQU8sQ0FBQyxHQUFHLGlCQUFpQixNQUFNLEtBQUssU0FBUyxDQUFDO0FBQ3hFLFlBQVEsSUFBSSxnQkFBZ0I7QUFBQSxFQUM3QjtBQUFBLEVBR0EsTUFBTSxlQUFlO0FBQ3BCLFVBQU0sS0FBSyxTQUFTLEtBQUssUUFBUTtBQUFBLEVBQ2xDO0FBQUEsRUFFQSxNQUFNLGlCQUFpQixhQUFzQztBQUM1RCxRQUFJLGdCQUFnQjtBQUNwQixRQUFJLGdCQUFnQixLQUFLLFNBQVM7QUFDbEMsUUFBSSxLQUFLLFNBQVMsbUJBQWtCO0FBQ25DLHNCQUFnQixLQUFLLFNBQVM7QUFBQSxJQUMvQjtBQUVBLFNBQUssU0FBUyxlQUFlLGVBQWUsZ0JBQWdCLGlCQUFpQixLQUFLLFNBQVM7QUFDM0YsVUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBRWpDLFdBQU8sS0FBSyxpQkFBaUIsS0FBSyxTQUFTLGNBQWM7QUFBQSxFQUMxRDtBQUFBLEVBRUEsTUFBTSxzQkFBc0IsZUFBcUI7QUFDaEQsVUFBTSxXQUFXLFlBQVksS0FBSyxTQUFTLGdCQUFnQixlQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3BGLFNBQUssU0FBUyxnQkFBZ0I7QUFDOUIsVUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQ2pDLFlBQVEsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLGVBQWU7QUFBQSxFQUM1RDtBQUFBLEVBR0EsTUFBTSxzQkFBc0IsZUFBcUI7QUFDaEQsUUFBSSxXQUFXLFlBQVksS0FBSyxTQUFTLGdCQUFnQixlQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ2xGLFNBQUssU0FBUyxnQkFBZ0I7QUFDOUIsUUFBSSxXQUFXLEdBQUU7QUFDaEIsaUJBQVc7QUFBQSxJQUNaO0FBQ0EsU0FBSyxTQUFTLGdCQUFnQjtBQUM5QixVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFBQSxFQUNsQztBQUFBLEVBS0EsTUFBTSxpQkFBaUIsZ0JBQXlDO0FBQy9ELFVBQU0sZUFBZSxJQUFJLE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CO0FBQzNFLFFBQUksZ0JBQWdCLE1BQU07QUFDekIsY0FBUSxJQUFJLFFBQVEsa0NBQWtDO0FBQ3RELGFBQU87QUFBQSxJQUNSO0FBQ0EsVUFBTSxPQUFPO0FBR2IsVUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QyxRQUFJLFlBQTJCO0FBQy9CLFFBQUksYUFBNEI7QUFDaEMsUUFBSSxhQUE0QjtBQUNoQyxRQUFJLGFBQTRCO0FBQ2hDLFFBQUksTUFBcUI7QUFDekIsUUFBSSxRQUF1QjtBQUMzQixRQUFJLE9BQXNCO0FBQzFCLFFBQUksU0FBd0I7QUFDNUIsUUFBSSxPQUFzQjtBQUMxQixRQUFJLFNBQXdCO0FBQzVCLFFBQUksT0FBc0I7QUFDMUIsUUFBSSxTQUF3QjtBQUU1QixVQUFNLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDaEMsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLE1BQU0sUUFBUUEsTUFBSztBQUN0QyxZQUFNLE9BQU8sTUFBTUEsRUFBQyxFQUFFLEtBQUs7QUFDM0IsVUFBSSxTQUFTLG1CQUFtQjtBQUMvQixZQUFJLGNBQWMsTUFBTTtBQUN2QixzQkFBWUE7QUFBQSxRQUNiO0FBQUEsTUFDRDtBQUNBLFVBQUksU0FBUyx3QkFBd0I7QUFDcEMsWUFBSSxlQUFlLE1BQU07QUFDeEIsdUJBQWFBO0FBQUEsUUFDZDtBQUFBLE1BQ0Q7QUFDQSxVQUFJLFNBQVMseUJBQXlCO0FBQ3JDLFlBQUksZUFBZSxNQUFNO0FBQ3hCLHVCQUFhQTtBQUFBLFFBQ2Q7QUFBQSxNQUNEO0FBQ0EsVUFBSSxTQUFTLGtCQUFrQjtBQUM5QixZQUFJLGVBQWUsTUFBTTtBQUN4Qix1QkFBYUE7QUFBQSxRQUNkO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxVQUFNLFlBQVksS0FBSyxTQUFTO0FBRWhDLFVBQU0sUUFBUSxrQkFBa0IsU0FBUztBQUN6QyxRQUFJLGNBQWMsS0FBSyxTQUFTO0FBQ2hDLFFBQUksZUFBZTtBQUNuQixRQUFJLEtBQUssU0FBUyxjQUFjLE1BQU0sT0FBTTtBQUUzQyxVQUFJLHdCQUFPLFFBQVEsMENBQTBDLE1BQU0sUUFBUTtBQUUzRSxxQkFBZSxxQkFBcUIsS0FBSyxTQUFTLGFBQWEsTUFBTSxLQUFLO0FBQzFFLFdBQUssU0FBUyxjQUFjLE1BQU07QUFDbEMsb0JBQWMsTUFBTTtBQUNwQixXQUFLLFNBQVMsaUJBQWlCLE1BQU07QUFDckMsWUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQUEsSUFDbEM7QUFFQSxVQUFNLGlCQUFpQixjQUFjO0FBQ3JDLFVBQU0sa0JBQWtCLHNCQUFzQixNQUFNLFFBQVEsc0JBQXNCLFlBQVksd0hBQXdILFlBQVksMERBQTBELGlCQUFpQixjQUFjLE1BQU0sU0FBUyxhQUFhLE1BQU0sYUFBYTtBQUMxVyxVQUFNLGlCQUFpQixxQ0FBcUMsS0FBSyxTQUFTLHdCQUF3QjtBQUNsRyxVQUFNLHdCQUFpQyxJQUFJLEtBQUssU0FBUztBQUN6RCxVQUFNLGtCQUFrQiw0Q0FBNEMsS0FBSyxTQUFTLHlCQUF5Qiw2SUFBNkksS0FBSyxTQUFTLHlCQUF5QiwwREFBMEQsd0JBQXdCO0FBQ2pYLFVBQU0sZ0JBQWdCLDhCQUE4QixLQUFLLFNBQVMsZ0JBQWdCO0FBRWxGLFFBQUksYUFBYSxRQUFRLGNBQWMsUUFBUSxjQUFjLFFBQVEsY0FBYyxNQUFLO0FBQ3ZGLGNBQVEsWUFBWTtBQUNwQixZQUFNLFlBQVk7QUFDbEIsZUFBUyxhQUFhLElBQUk7QUFDMUIsYUFBTyxhQUFhO0FBQ3BCLGVBQVMsYUFBYSxJQUFHO0FBQ3pCLGFBQU8sYUFBYSxLQUFJO0FBQ3hCLGVBQVMsYUFBYSxJQUFJO0FBQzFCLGFBQU8sYUFBYTtBQUdwQixZQUFNLFdBQVcsQ0FBQyxHQUFHLE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxpQkFBaUIsR0FBRyxNQUFNLE1BQU0sR0FBRyxDQUFDO0FBQ2hGLFlBQU0sWUFBWSxDQUFDLEdBQUcsU0FBUyxNQUFNLEdBQUcsTUFBTSxHQUFHLGdCQUFnQixHQUFHLFNBQVMsTUFBTSxJQUFJLENBQUM7QUFDeEYsWUFBTSxZQUFZLENBQUMsR0FBRyxVQUFVLE1BQU0sR0FBRyxNQUFNLEdBQUcsaUJBQWlCLEdBQUcsVUFBVSxNQUFNLElBQUksQ0FBQztBQUMzRixZQUFNLFlBQVksQ0FBQyxHQUFHLFVBQVUsTUFBTSxHQUFHLE1BQU0sR0FBRyxlQUFlLEdBQUcsVUFBVSxNQUFNLElBQUksQ0FBQztBQUN6RixZQUFNLElBQUksTUFBTSxPQUFPLE1BQU0sVUFBVSxLQUFLLElBQUksQ0FBQztBQUFBLElBQ2xEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUdBLE1BQU0sbUJBQW1CLGdCQUF3QixPQUFhO0FBQzdELFVBQU0sZUFBZSxJQUFJLE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CO0FBQzNFLFFBQUksZ0JBQWdCLE1BQU07QUFDekIsY0FBUSxJQUFJLFFBQVEsa0NBQWtDO0FBQ3REO0FBQUEsSUFDRDtBQUNBLFVBQU0sT0FBTztBQUViLFVBQU0sVUFBVSxNQUFNLElBQUksTUFBTSxLQUFLLElBQUk7QUFDekMsUUFBSSxZQUEyQjtBQUMvQixRQUFJLGFBQTRCO0FBQ2hDLFFBQUksTUFBcUI7QUFDekIsUUFBSSxRQUF1QjtBQUMzQixRQUFJLE9BQXNCO0FBQzFCLFFBQUksU0FBd0I7QUFFNUIsVUFBTSxRQUFRLFFBQVEsTUFBTSxJQUFJO0FBQ2hDLGFBQVNBLEtBQUksR0FBR0EsS0FBSSxNQUFNLFFBQVFBLE1BQUs7QUFDdEMsWUFBTSxPQUFPLE1BQU1BLEVBQUMsRUFBRSxLQUFLO0FBQzNCLFVBQUksU0FBUyxpQkFBaUI7QUFDN0IsWUFBSSxjQUFjLE1BQU07QUFDdkIsc0JBQVlBO0FBQUEsUUFDYjtBQUFBLE1BQ0Q7QUFDQSxVQUFJLFNBQVMsTUFBTSxRQUFRLFFBQVEsTUFBTSxPQUFPLEtBQUk7QUFDbkQsWUFBSSxlQUFlLE1BQU07QUFDeEIsdUJBQWFBO0FBQUEsUUFDZDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQ0EsUUFBSSxhQUFhLFFBQVEsY0FBYyxNQUFLO0FBQzNDLFlBQU0sWUFBWTtBQUNsQixjQUFRLFlBQVk7QUFFcEIsYUFBTyxhQUFhO0FBQ3BCLGVBQVMsYUFBYTtBQUV0QixZQUFNLGNBQWMsT0FBTyxNQUFNLE9BQU8sUUFBUSxNQUFNLFFBQVEsU0FBUyxNQUFNLGNBQWMsU0FBUyxPQUFPLE9BQU8sRUFBRSxPQUFPLFFBQVEsSUFBSTtBQUN2SSxZQUFNLFdBQVcsQ0FBQyxHQUFHLE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxhQUFhLEdBQUcsTUFBTSxNQUFNLEdBQUcsQ0FBQztBQUM1RSxZQUFNLFlBQVksQ0FBQyxHQUFHLFNBQVMsTUFBTSxHQUFHLE1BQU0sR0FBRyxHQUFHLFNBQVMsTUFBTSxJQUFJLENBQUM7QUFDeEUsWUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFVBQVUsS0FBSyxJQUFJLENBQUM7QUFDakQsY0FBUSxJQUFJLGdCQUFnQixhQUFhO0FBQUEsSUFDMUM7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLHVCQUF1QixnQkFBd0IsT0FBYTtBQUNqRSxVQUFNLGVBQWUsSUFBSSxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQjtBQUMzRSxRQUFJLGdCQUFnQixNQUFNO0FBQ3pCLGNBQVEsSUFBSSxRQUFRLGtDQUFrQztBQUN0RDtBQUFBLElBQ0Q7QUFDQSxVQUFNLE9BQU87QUFFYixVQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQ3pDLFFBQUksWUFBMkI7QUFDL0IsUUFBSSxNQUFxQjtBQUN6QixRQUFJLFFBQXVCO0FBRTNCLFVBQU0sUUFBUSxRQUFRLE1BQU0sSUFBSTtBQUNoQyxhQUFTQSxLQUFJLEdBQUdBLEtBQUksTUFBTSxRQUFRQSxNQUFLO0FBQ3RDLFlBQU0sT0FBTyxNQUFNQSxFQUFDLEVBQUUsS0FBSztBQUMzQixVQUFJLFNBQVMsaUJBQWlCO0FBQzdCLFlBQUksY0FBYyxNQUFNO0FBQ3ZCLHNCQUFZQTtBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUNBLFFBQUksYUFBYSxNQUFNO0FBQ3RCLFlBQU0sWUFBWTtBQUNsQixjQUFRLFlBQVk7QUFFcEIsWUFBTSxjQUFjLE9BQU8sTUFBTSxPQUFPLFdBQVcsTUFBTSxjQUFjLFNBQVMsT0FBTyxPQUFPLEVBQUUsT0FBTyxRQUFRLElBQUk7QUFDbkgsWUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsYUFBYSxHQUFHLE1BQU0sTUFBTSxHQUFHLENBQUM7QUFDNUUsWUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFDaEQsY0FBUSxJQUFJLGdCQUFnQixhQUFhO0FBQUEsSUFDMUM7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLGdDQUFnQyxnQkFBd0IsT0FBYztBQUMzRSxVQUFNLGVBQWUsSUFBSSxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQjtBQUMzRSxRQUFJLGdCQUFnQixNQUFNO0FBQ3pCLGNBQVEsSUFBSSxRQUFRLGtDQUFrQztBQUN0RDtBQUFBLElBQ0Q7QUFDQSxVQUFNLE9BQU87QUFFYixVQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQ3pDLFFBQUksWUFBMkI7QUFDL0IsUUFBSSxhQUE0QjtBQUVoQyxVQUFNLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDaEMsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLE1BQU0sUUFBUUEsTUFBSztBQUN0QyxZQUFNLE9BQU8sTUFBTUEsRUFBQyxFQUFFLEtBQUs7QUFDM0IsVUFBSSxTQUFTLG9CQUFvQjtBQUNoQyxZQUFJLGNBQWMsTUFBTTtBQUN2QixzQkFBWUE7QUFBQSxRQUNiO0FBQUEsTUFDRDtBQUNBLFVBQUksYUFBYSxRQUFRLGNBQWMsTUFBSztBQUUzQyxjQUFNLGFBQWE7QUFFbkIsY0FBTUMsU0FBUSxLQUFLLE1BQU0sVUFBVTtBQUVuQyxZQUFHQSxRQUFNO0FBQ1IsZ0JBQU0sY0FBYyxTQUFTQSxPQUFNLENBQUMsR0FBRyxFQUFFO0FBQ3pDLGNBQUksY0FBYyxPQUFPO0FBQ3hCLHlCQUFhRDtBQUFBLFVBQ2Q7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFDQSxRQUFJLGFBQWEsUUFBUSxjQUFjLE1BQUs7QUFDM0MsWUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxHQUFHLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFDOUUsWUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFBQSxJQUNqRDtBQUFBLEVBQ0Q7QUFBQSxFQUdBLE1BQU0sWUFBWSxPQUE4QjtBQUMvQyxVQUFNLFFBQVEsTUFBTSxpQkFBaUI7QUFDckMsVUFBTSxlQUFlLHlCQUF5QixLQUFLO0FBR25ELFVBQU0sZUFBZSxhQUFhLEtBQUs7QUFHdkMsUUFBSSxlQUFlO0FBQ25CLFFBQUksWUFBWSxJQUFJLEtBQUssWUFBWTtBQUVyQyxVQUFNLHNCQUFzQixvQkFBSSxJQUFvQjtBQUNwRCxVQUFNLGFBQWEsY0FBYyxJQUFJLEtBQUssWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ25FLFFBQUksYUFBYSxVQUFVLFNBQVMsSUFBRSxJQUFJLE1BQU0sVUFBVSxZQUFZO0FBQ3RFLFFBQUksU0FBUztBQVViLG1CQUFlO0FBQ2YsZ0JBQVksSUFBSSxLQUFLLFlBQVk7QUFDakMsaUJBQWEsVUFBVSxTQUFTLElBQUUsSUFBSSxNQUFNLFVBQVUsWUFBWTtBQUVsRSxXQUFPLGVBQWUsWUFBVztBQUNoQyxtQkFBYSxVQUFVLFNBQVMsSUFBRSxJQUFJLE1BQU0sVUFBVSxZQUFZO0FBRWxFLGVBQVMsU0FBUyxhQUFhO0FBQy9CLGdCQUFVLFNBQVMsVUFBVSxTQUFTLElBQUksQ0FBQztBQUMzQyxzQkFBZ0I7QUFDaEIsMEJBQW9CLElBQUksWUFBWSxDQUFDO0FBQUEsSUFDdEM7QUFDQSxhQUFTLE9BQU8sTUFBTSxHQUFFLE9BQU8sU0FBTyxDQUFDO0FBa0J2QyxVQUFNLG9CQUFvQixxQkFBcUIsS0FBSztBQUNwRCxhQUFTQSxLQUFJLEdBQUdBLEtBQUksa0JBQWtCLFFBQVFBLE1BQUk7QUFFakQsWUFBTSxnQkFBZ0IsT0FBTyxrQkFBa0JBLEVBQUMsR0FBRyxRQUFRO0FBQzNELFlBQU0sZUFBZSxvQkFBb0IsSUFBSSxhQUFhO0FBRTFELFVBQUksaUJBQWlCLFFBQVc7QUFDL0IsNEJBQW9CLElBQUksZUFBZSxlQUFlLENBQUM7QUFBQSxNQUN4RCxPQUFPO0FBRU4sNEJBQW9CLElBQUksZUFBZSxDQUFDO0FBQUEsTUFDekM7QUFBQSxJQUNEO0FBVUEsUUFBSSxxQkFBcUI7QUFDekIsZUFBVyxDQUFDLEtBQUssS0FBSyxxQkFBcUI7QUFFMUMsMkJBQXFCLHFCQUFxQixRQUFRO0FBQUEsSUFDbkQ7QUFDQSx5QkFBcUIsbUJBQW1CLE1BQU0sR0FBRSxtQkFBbUIsU0FBTyxDQUFDO0FBRTNFLFdBQU8sa0JBQWtCLFFBQVEsb0JBQW9CLEtBQUssU0FBUyxzQkFBc0I7QUFBQSxFQUMxRjtBQUFBLEVBRUEsTUFBTSxnQkFBZ0IsVUFBMkI7QUFDaEQsYUFBUyxLQUFLLENBQUMsV0FBbUI7QUFDakMsVUFBRyxRQUFPO0FBQ1QsY0FBTSxRQUFnQixpQkFBaUIsS0FBSyxTQUFTLGFBQWEsS0FBSztBQUN2RSxZQUFJLHdCQUFPLHNCQUFzQixNQUFNLGdCQUFnQixNQUFNLGFBQWE7QUFDMUUsZ0JBQVEsSUFBSSxzQkFBc0IsTUFBTSxnQkFBZ0IsTUFBTSxhQUFhO0FBRTNFLGFBQUssbUJBQW1CLEtBQUssU0FBUyxnQkFBZ0IsS0FBSztBQUMzRCxhQUFLLFNBQVMsb0JBQW9CO0FBQ2xDLGFBQUssU0FBUyxxQkFBcUI7QUFDbkMsYUFBSyxTQUFTLEtBQUssUUFBUTtBQUFBLE1BQzVCO0FBQUEsSUFDRCxDQUFDO0FBQUEsRUFDRjtBQUFBLEVBR0EsTUFBTSw0QkFBNEI7QUFFakMsVUFBTSxFQUFFLE1BQU0sSUFBSSxLQUFLO0FBS3ZCLFVBQU0sZUFBZSxNQUFNLGdCQUFnQixLQUFLLEtBQUssS0FBSyxTQUFTLGFBQWEsS0FBSyxTQUFTLGFBQWE7QUFDM0csZUFBVyxZQUFZLGFBQWEsS0FBSyxHQUFHO0FBQzNDLFlBQU0sUUFBUSxNQUFNLFNBQVM7QUFDN0IsWUFBTSxPQUFPLE1BQU0sS0FBSyxDQUFBRSxVQUFRQSxNQUFLLGFBQWEsUUFBUTtBQUMxRCxVQUFJLENBQUMsTUFBTTtBQUNWLGdCQUFRLEtBQUssUUFBUSxxQkFBcUI7QUFDMUM7QUFBQSxNQUNEO0FBRUEsY0FBUSxJQUFJLG1CQUFtQixVQUFVO0FBQ3pDLFVBQUk7QUFDSCxjQUFNLEtBQUssSUFBSSxZQUFZLG1CQUFtQixNQUFNLENBQUMsZ0JBQWdCO0FBQ3BFLGlCQUFPLFlBQVksYUFBYTtBQUNoQyxpQkFBTyxZQUFZLG1CQUFtQjtBQUN0QyxpQkFBTyxZQUFZLGNBQWM7QUFDakMsaUJBQU8sWUFBWSxlQUFlO0FBQ2xDLGlCQUFPLFlBQVksb0NBQW9DO0FBQ3ZELGlCQUFPLFlBQVksZUFBZTtBQUFBLFFBQ25DLENBQUM7QUFBQSxNQUNGLFNBQVNILElBQVA7QUFDRCxhQUFJQSxNQUFBLGdCQUFBQSxHQUFHLFVBQVMsa0JBQWtCO0FBQ2pDLGdCQUFNLGVBQWUsaURBQWlEQSxHQUFFO0FBQ3hFLGNBQUksd0JBQU8sY0FBYyxHQUFJO0FBQzdCLGtCQUFRLE1BQU0sWUFBWTtBQUFBLFFBQzNCO0FBQUEsTUFDRDtBQUFBLElBRUQ7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLG9CQUFvQixjQUFzQztBQUMvRCxRQUFJLGlCQUFpQjtBQUNyQixhQUFTQyxLQUFJLGNBQWNBLEtBQUksS0FBS0EsTUFBSTtBQUN2QyxZQUFNLFFBQWdCLGlCQUFpQkEsSUFBRyxJQUFJO0FBRTlDLFlBQU0sYUFBYTtBQUVuQixZQUFNQyxTQUFRLE1BQU0sTUFBTSxNQUFNLFVBQVU7QUFDMUMsVUFBR0EsUUFBTTtBQUNSLGNBQU0sY0FBYyxTQUFTQSxPQUFNLENBQUMsR0FBRyxFQUFFO0FBQ3pDLFlBQUksY0FBYyxnQkFBZ0Isa0JBQWtCLEdBQUk7QUFDdkQsMkJBQWlCO0FBQUEsUUFDbEI7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUNBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFFQSxNQUFNLGlCQUFrQztBQUN2QyxVQUFNLGNBQWMsTUFBTSxLQUFLLG9CQUFvQixLQUFLLFNBQVMsV0FBVztBQUM1RSxVQUFNLHNCQUFzQixxQkFBcUIsV0FBVztBQUk1RCxVQUFNLGdCQUFnQixLQUFLLE9BQU8sc0JBQXNCLEtBQUssU0FBUyxnQkFBYyxLQUFHLEdBQUc7QUFDMUYsU0FBSyxTQUFTLHFCQUFxQjtBQUNuQyxTQUFLLFNBQVMsb0JBQW9CO0FBQ2xDLFVBQU0sS0FBSyxTQUFTLEtBQUssUUFBUTtBQUVqQyxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsTUFBTSxpQkFBaUI7QUFqZ0N4QjtBQWtnQ0UsVUFBTSxlQUFlLElBQUksTUFBTSxzQkFBc0IsR0FBRyxLQUFLLFNBQVMsbUJBQW1CO0FBQ3pGLFFBQUksY0FBYTtBQUNoQixZQUFNLGVBQWEsVUFBSyxJQUFJLFVBQVUsY0FBYyxNQUFqQyxtQkFBb0MsU0FBUTtBQUMvRCxZQUFNLElBQUksVUFBVSxhQUFhLGFBQWEsTUFBTSxVQUFVO0FBQUEsSUFDL0QsT0FBTztBQUNOLGNBQVEsSUFBSSxtQ0FBbUM7QUFBQSxJQUNoRDtBQUFBLEVBQ0Q7QUFFRDtBQUdBLFNBQVMsVUFBVSxXQUE0QjtBQUM5QyxRQUFNLGNBQWMsT0FBTyxPQUFPO0FBQ2xDLFNBQU8sWUFBWSxPQUFPLFdBQVcsS0FBSztBQUMzQztBQUVBLFNBQVMsZUFBZSxXQUE0QjtBQUNuRCxRQUFNLHNCQUFzQixPQUFPLE9BQU8sRUFBRSxTQUFTLEdBQUcsS0FBSztBQUM3RCxTQUFPLFVBQVUsT0FBTyxxQkFBcUIsS0FBSztBQUNuRDtBQUtBLGVBQWUsaUJBQWlCRSxNQUFVLFVBQWlDO0FBTTFFLFFBQU0sZUFBZUEsS0FBSSxNQUFNLHNCQUFzQixHQUFHLGFBQWE7QUFDckUsTUFBSSx3QkFBd0Isd0JBQU87QUFDbEMsWUFBUSxJQUFJLFFBQVEsNEJBQTRCO0FBQ2hEO0FBQUEsRUFDRDtBQUVBLFFBQU1BLEtBQUksTUFBTSxPQUFPLEdBQUcsZUFBZSxpQkFBaUI7QUFFM0Q7QUFHQSxJQUFNLHNCQUFOLGNBQWtDLHVCQUFNO0FBQUE7QUFBQSxFQUd2QyxZQUFZQSxNQUFVLGFBQXFCO0FBQzFDLFVBQU1BLElBQUc7QUFDVCxTQUFLLGNBQWM7QUFBQSxFQUNwQjtBQUFBLEVBRUEsU0FBUztBQUNSLFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxRQUFRLEtBQUssV0FBVztBQUFBLEVBQ25DO0FBQUEsRUFFQSxVQUFVO0FBQ1QsVUFBTSxFQUFFLFVBQVUsSUFBSTtBQUN0QixjQUFVLE1BQU07QUFBQSxFQUNqQjtBQUNEO0FBR0EsZUFBZSxxQkFBcUIsUUFBZ0IsUUFBZ0I7QUFDbkUsUUFBTSxhQUFhLEtBQUssSUFBSSxVQUFVLG9CQUFvQiw2QkFBWTtBQUV0RSxNQUFJLENBQUMsWUFBWTtBQUNoQixZQUFRLE1BQU0sZ0NBQWdDO0FBQzlDO0FBQUEsRUFDRDtBQUVBLFFBQU0sU0FBUyxXQUFXO0FBQzFCLFFBQU0sZUFBZSxPQUFPLGFBQWE7QUFFekMsTUFBSSxDQUFDLGNBQWM7QUFDbEIsWUFBUSxNQUFNLHNFQUFzRTtBQUNwRjtBQUFBLEVBQ0Q7QUFFQSxNQUFJLGVBQWUsYUFBYSxXQUFXLFFBQVEsa0JBQU07QUFDekQsaUJBQWUsYUFBYSxXQUFXLFFBQVEsMEJBQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLDRCQUFRLE1BQU07QUFDckQsaUJBQWUsYUFBYSxXQUFXLG9CQUFRLE1BQU07QUFFckQsU0FBTyxpQkFBaUIsWUFBWTtBQUNyQztBQUVBLFNBQVMsNkJBQTZCLGVBQXVCLFdBQTJCO0FBQ3ZGLE1BQUk7QUFDSixNQUFJLFNBQVMsZUFBZSxFQUFFLElBQUksV0FBVTtBQUMzQyxtQkFBZSxZQUFZLFNBQVMsZUFBZSxFQUFFO0FBQUEsRUFDdEQsT0FBTztBQUNOLG1CQUFlO0FBQUEsRUFDaEI7QUFFQSxTQUFPO0FBQ1I7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAib2JqIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgIk1JTExJU0VDT05EU19JTl9XRUVLIiwgImZvcm1hdHRlcnMiLCAibG9jYWxpemUiLCAieSIsICJNIiwgImQiLCAiYSIsICJoIiwgIkgiLCAibSIsICJzIiwgIlMiLCAiZGF0ZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0TG9uZyIsICJ0aW1lTG9uZ0Zvcm1hdHRlciIsICJkYXRlVGltZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0IiwgImZvcm1hdERpc3RhbmNlIiwgImZvcm1hdCIsICJmb3JtYXRSZWxhdGl2ZSIsICJvcmRpbmFsTnVtYmVyIiwgInZhbHVlQ2FsbGJhY2siLCAiZGVmYXVsdE9wdGlvbnMiLCAibG9jYWxlIiwgIm1hdGNoIiwgInBhdGgiLCAiYXBwIiwgImZpbGVOYW1lIiwgImN1cnJlbnRDb3VudCIsICJpIiwgImkiLCAiZSIsICJpIiwgIm1hdGNoIiwgImZpbGUiLCAiYXBwIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJyk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpXHJcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlICogKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyKSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZWFjaGVkISAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBjcmVhdGVkLmApXHJcblx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHQvLyBkbyBub3RoaW5nXHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBub3RlIGNyZWF0aW9uIHdhcyByYXRlZCBhbHJlYWR5IHRvZGF5LmApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCkge1xyXG5cdFx0bGV0IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRpZiAoY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA8IDcpIHtcclxuXHRcdFx0Y3VycmVudFdlZWtseUNyZWF0ZWROb3RlcysrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXIpIHtcclxuXHRcdGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrIDw9IDYpIHtcclxuXHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDEpO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSAqICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcikpO1xyXG5cdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgdXBkYXRlU3RhdHVzQmFyKHN0YXR1c2JhcjogSFRNTFNwYW5FbGVtZW50KXtcclxuXHRcdGNvbnN0IGN1cnJlbnRMZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKVxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NiYXJQZXJjZW50ID0gKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzIC0gY3VycmVudExldmVsLnBvaW50cykvKGN1cnJlbnRMZXZlbC5wb2ludHNOZXh0IC0gY3VycmVudExldmVsLnBvaW50cykqMTAwO1xyXG5cdFx0Y29uc3QgY2hhck51bVByb2dyZXNzYmFyID0gMTBcclxuXHRcdGNvbnN0IGJhckxlbmd0aCA9IE1hdGgucm91bmQocHJvZ3Jlc3NiYXJQZXJjZW50IC8gY2hhck51bVByb2dyZXNzYmFyKVxyXG5cdFx0c3RhdHVzYmFyLnNldFRleHQoYFx1RDgzQ1x1REZCMnxsdmw6ICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gfCAke3RoaXMuY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyLCBiYXJMZW5ndGgpfWApXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZVByb2dyZXNzYmFyKGNoYXJOdW1Qcm9ncmVzc2JhcjogbnVtYmVyLCBiYXJMZW5ndGg6IG51bWJlcikge1xyXG5cdFx0bGV0IHByb2dyZXNzYmFyID0gJydcclxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDw9IGNoYXJOdW1Qcm9ncmVzc2JhcjsgaSsrKSB7XHJcblx0XHRcdGlmIChpIDw9IGJhckxlbmd0aCkge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICc9J1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICctJ1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJvZ3Jlc3NiYXI7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdFx0Y29uc29sZS5sb2coJ2xvYWRTZXR0aW5ncygpJylcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNUb0FkZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGxldCBib29zdGVyRmFjdG9yID0gMTtcclxuXHRcdGxldCBzdHJlYWtib29zdGVyID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyO1xyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSBwb2ludHNUb0FkZCAqIChib29zdGVyRmFjdG9yICsgc3RyZWFrYm9vc3RlcikgKyB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlU3RyZWFrYm9vc3RlcihpbmNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHRjb25zdCBuZXdWYWx1ZSA9IHBhcnNlRmxvYXQoKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArIGluY3JlYXNlVmFsdWUpLnRvRml4ZWQoMSkpO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3VmFsdWU7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRjb25zb2xlLmxvZyhgc3RyZWFrYm9vc3RlcjogJHt0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJ9YClcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gcGFyc2VGbG9hdCgodGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC0gZGVjcmVhc2VWYWx1ZSkudG9GaXhlZCgxKSlcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiAnMTIuMDguMjAyMycsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElTZXR0aW5ncyB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIGJpbmRUYWI6IGJvb2xlYW47XG4gIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgbnVtQWxsRmlsZXM6IG51bWJlcjtcbiAgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHN0YXR1c1BvaW50czogbnVtYmVyO1xuICBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBkZWJ1ZzogYm9vbGVhbjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuICBzdHJlYWtib29zdGVyRGF0ZTogc3RyaW5nO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogZ2FtaWZpY2F0aW9uKSB7XG5cdCAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuXHQgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHR9XG4gIFxuXHRwdWJsaWMgZGlzcGxheSgpOiB2b2lkIHtcblx0XHRjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXHRcdGNvbnRhaW5lckVsLmFkZENsYXNzKFwiZXhjYWxpZHJhdy1zZXR0aW5nc1wiKTtcblx0XHR0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG5cblx0XHRjb25zdCBjb2ZmZWVEaXYgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoXCJjb2ZmZWVcIik7XG5cdFx0Y29mZmVlRGl2LmFkZENsYXNzKFwiZXgtY29mZmVlLWRpdlwiKTtcblx0XHRjb25zdCBjb2ZmZWVMaW5rID0gY29mZmVlRGl2LmNyZWF0ZUVsKFwiYVwiLCB7XG5cdFx0aHJlZjogXCJodHRwczovL2tvLWZpLmNvbS9hbmRyZWFzdHJlYmluZ1wiLFxuXHRcdH0pO1xuXHRcdGNvbnN0IGNvZmZlZUltZyA9IGNvZmZlZUxpbmsuY3JlYXRlRWwoXCJpbWdcIiwge1xuXHRcdGF0dHI6IHtcblx0XHRcdHNyYzogXCJodHRwczovL2Nkbi5rby1maS5jb20vY2RuL2tvZmkzLnBuZz92PTNcIixcblx0XHR9LFxuXHRcdH0pO1xuXHRcdGNvZmZlZUltZy5oZWlnaHQgPSA0NTtcblxuXHRcdC8vY29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHQvL2NvbnRhaW5lckVsLmVtcHR5KCk7XG4gIFxuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ0dhbWlmeSB5b3VyIFBLTSAtIFNldHRpbmdzJyB9KTtcblx0XHRjb25zb2xlLmxvZygnc2V0dGluZ3MgY2FsbGVkJylcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCcjdGFncyB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIHRhZ3Mgd2l0aG91dCAjIGFuZCBzZXBhcmF0ZSB3aXRoIFwiLCBcIi5cXG5JbmNsdWRlIG5lc3RlZCB0YWdzLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdFbnRlciB5b3VyIHRhZzEsIHRhZzIvc3VidGFnLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cblx0XHRcdFx0XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnZm9sZGVyIHRvIGlnbm9yZScpXG5cdFx0XHQuc2V0RGVzYygnZW50ZXIgZm9sZGVyIHdoaWNocyBjb250ZW50IHNoYWxsIGJlIGlnbm9yZWQuIFNlcGFyYXRlIHdpdGggXCIsIFwiLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdFbnRlciB5b3VyIGZvbGRlcjEsIGZvbGRlcjIsIFx1MjAyNicpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnUHJvZmlsZSBQYWdlIE5hbWUnKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIGhlcmUgdGhlIG5hbWUgb2YgeW91ciBwcm9maWxlIHBhZ2UgaWYgeW91IGxpa2UuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignbmFtZScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdPdGhlciBTZXR0aW5ncycgfSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnRGlzYWJsZSBJbml0IENvbW1hbmQnKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gcmVtb3ZlIHRoZSBpbml0IGNvbW1hbmQgZnJvbSBjb21tYW5kIHByb21wdCBieSBzd2l0Y2hpbmcgb2ZmLlxcbnJlc3RhcnQgbmVlZGVkLicpXG5cdFx0XHQuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IFxuXHRcdFx0XHR0b2dnbGVcbiAgICAgICAgICBcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kKVxuICAgICAgICBcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZCA9IHZhbHVlO1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuICAgICAgICAgIFx0XHRcdH0pLFxuXHRcdFx0KTtcblxuXHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2xpbWl0IHRoZSB2aXNpYmxlIG1vbnRoIGluIHRoZSBjaGFydCBvbiB5b3VyIGF2YXRhciBwYWdlOiAnICsgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXG5cdFx0XHQuc2V0RGVzYygnaWYgMCwgYWxsIG1vbnRoIHdpbGwgYmUgc2hvd24uIEVudGVyIGEgbnVtYmVyIGhvdyBtYW55IG1vbnRoIHNoYWxsIGJlIHNob3duLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ051bWJlciBvZiBNb250aCB0byBzaG93Jylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZS50b1N0cmluZygpKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPSBwYXJzZUludCh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG4gIFxuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnUHJvZ3Jlc3NpdmUgU3VtbWFyaXphdGlvbicpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2Ugd2hpY2ggZm9ybWF0dGluZyB5b3UgdXNlIGZvciBMYXllciAyIGFuZCAzLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0xheWVyIDIgaXMgdXN1YWxseSAqKicpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0xheWVyIDMgaXMgdXN1YWxseSA9PScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdH0pKTtcblxuXHR9XG4gIH0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWlyZWRBcmdzKHJlcXVpcmVkLCBhcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA8IHJlcXVpcmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihyZXF1aXJlZCArICcgYXJndW1lbnQnICsgKHJlcXVpcmVkID4gMSA/ICdzJyA6ICcnKSArICcgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmdzLmxlbmd0aCArICcgcHJlc2VudCcpO1xuICB9XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBkYXRlP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLiBUaGUgZnVuY3Rpb24gd29ya3MgZm9yIGRhdGVzIHRyYW5zZmVycmVkIGFjcm9zcyBpZnJhbWVzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRhdGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGEgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZSgpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoTmFOKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3Igc29tZSB2YWx1ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSgnMjAxNC0wMi0zMScpXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBvYmplY3Q6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoe30pXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCBfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGFyZ1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCk7XG5cbiAgLy8gQ2xvbmUgdGhlIGRhdGVcbiAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgRGF0ZSB8fCBfdHlwZW9mKGFyZ3VtZW50KSA9PT0gJ29iamVjdCcgJiYgYXJnU3RyID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdudW1iZXInIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgTnVtYmVyXScpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IFN0cmluZ10nKSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXCJTdGFydGluZyB3aXRoIHYyLjAuMC1iZXRhLjEgZGF0ZS1mbnMgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyBhcyBkYXRlIGFyZ3VtZW50cy4gUGxlYXNlIHVzZSBgcGFyc2VJU09gIHRvIHBhcnNlIHN0cmluZ3MuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI3N0cmluZy1hcmd1bWVudHNcIik7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cbn0iLCAiaW1wb3J0IGlzRGF0ZSBmcm9tIFwiLi4vaXNEYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzVmFsaWRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdmFsaWQ/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGZhbHNlIGlmIGFyZ3VtZW50IGlzIEludmFsaWQgRGF0ZSBhbmQgdHJ1ZSBvdGhlcndpc2UuXG4gKiBBcmd1bWVudCBpcyBjb252ZXJ0ZWQgdG8gRGF0ZSB1c2luZyBgdG9EYXRlYC4gU2VlIFt0b0RhdGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlfVxuICogSW52YWxpZCBEYXRlIGlzIGEgRGF0ZSwgd2hvc2UgdGltZSB2YWx1ZSBpcyBOYU4uXG4gKlxuICogVGltZSB2YWx1ZSBvZiBEYXRlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjkuMS4xXG4gKlxuICogQHBhcmFtIHsqfSBkYXRlIC0gdGhlIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZSBpcyB2YWxpZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoMjAxNCwgMSwgMzEpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsdWUsIGNvbnZlcnRhYmxlIGludG8gYSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZCgxMzkzODA0ODAwMDAwKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgnJykpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVmFsaWQoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICBpZiAoIWlzRGF0ZShkaXJ0eURhdGUpICYmIHR5cGVvZiBkaXJ0eURhdGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHJldHVybiAhaXNOYU4oTnVtYmVyKGRhdGUpKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn0iLCAiaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgYWRkTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZE1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjMwLjc1MFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufSIsICJpbXBvcnQgYWRkTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9hZGRNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdWJNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgc3VidHJhY3RlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA3NTAgbWlsbGlzZWNvbmRzIGZyb20gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1Yk1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjI5LjI1MFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCAtYW1vdW50KTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fREFZID0gODY0MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENEYXlPZlllYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mWWVhclRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICB2YXIgZGlmZmVyZW5jZSA9IHRpbWVzdGFtcCAtIHN0YXJ0T2ZZZWFyVGltZXN0YW1wO1xuICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gTUlMTElTRUNPTkRTX0lOX0RBWSkgKyAxO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gMTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENGdWxsWWVhcih5ZWFyICsgMSwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHllYXIgPSBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5ID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDSVNPV2VlayhkYXRlKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGF0ZSkuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJ2YXIgZGVmYXVsdE9wdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXdPcHRpb25zO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGZpcnN0V2Vla09mTmV4dFllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENGdWxsWWVhcih5ZWFyICsgMSwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mTmV4dFllYXIsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZlRoaXNZZWFyLCBvcHRpb25zKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcbiAgdmFyIHllYXIgPSBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vlay5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWsuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrLCBvcHRpb25zKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENXZWVrKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIsIHRhcmdldExlbmd0aCkge1xuICB2YXIgc2lnbiA9IG51bWJlciA8IDAgPyAnLScgOiAnJztcbiAgdmFyIG91dHB1dCA9IE1hdGguYWJzKG51bWJlcikudG9TdHJpbmcoKTtcbiAgd2hpbGUgKG91dHB1dC5sZW5ndGggPCB0YXJnZXRMZW5ndGgpIHtcbiAgICBvdXRwdXQgPSAnMCcgKyBvdXRwdXQ7XG4gIH1cbiAgcmV0dXJuIHNpZ24gKyBvdXRwdXQ7XG59IiwgImltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKi9cbnZhciBmb3JtYXR0ZXJzID0ge1xuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4pIHtcbiAgICAvLyBGcm9tIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtMzEvdHIzNS1kYXRlcy5odG1sI0RhdGVfRm9ybWF0X3Rva2Vuc1xuICAgIC8vIHwgWWVhciAgICAgfCAgICAgeSB8IHl5IHwgICB5eXkgfCAgeXl5eSB8IHl5eXl5IHxcbiAgICAvLyB8LS0tLS0tLS0tLXwtLS0tLS0tfC0tLS18LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS18XG4gICAgLy8gfCBBRCAxICAgICB8ICAgICAxIHwgMDEgfCAgIDAwMSB8ICAwMDAxIHwgMDAwMDEgfFxuICAgIC8vIHwgQUQgMTIgICAgfCAgICAxMiB8IDEyIHwgICAwMTIgfCAgMDAxMiB8IDAwMDEyIHxcbiAgICAvLyB8IEFEIDEyMyAgIHwgICAxMjMgfCAyMyB8ICAgMTIzIHwgIDAxMjMgfCAwMDEyMyB8XG4gICAgLy8gfCBBRCAxMjM0ICB8ICAxMjM0IHwgMzQgfCAgMTIzNCB8ICAxMjM0IHwgMDEyMzQgfFxuICAgIC8vIHwgQUQgMTIzNDUgfCAxMjM0NSB8IDQ1IHwgMTIzNDUgfCAxMjM0NSB8IDEyMzQ1IHxcblxuICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRva2VuID09PSAneXknID8geWVhciAlIDEwMCA6IHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSAnTScgPyBTdHJpbmcobW9udGggKyAxKSA6IGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDRGF0ZSgpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0VVRDSG91cnMoKSAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTtcbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gJ2FtJyA/ICdhLm0uJyA6ICdwLm0uJztcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ01pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHZhciBudW1iZXJPZkRpZ2l0cyA9IHRva2VuLmxlbmd0aDtcbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgICB2YXIgZnJhY3Rpb25hbFNlY29uZHMgPSBNYXRoLmZsb29yKG1pbGxpc2Vjb25kcyAqIE1hdGgucG93KDEwLCBudW1iZXJPZkRpZ2l0cyAtIDMpKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGZyYWN0aW9uYWxTZWNvbmRzLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAiaW1wb3J0IGdldFVUQ0RheU9mWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENEYXlPZlllYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENJU09XZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbmltcG9ydCBsaWdodEZvcm1hdHRlcnMgZnJvbSBcIi4uL2xpZ2h0Rm9ybWF0dGVycy9pbmRleC5qc1wiO1xudmFyIGRheVBlcmlvZEVudW0gPSB7XG4gIGFtOiAnYW0nLFxuICBwbTogJ3BtJyxcbiAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gIG5vb246ICdub29uJyxcbiAgbW9ybmluZzogJ21vcm5pbmcnLFxuICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICBldmVuaW5nOiAnZXZlbmluZycsXG4gIG5pZ2h0OiAnbmlnaHQnXG59O1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgTWlsbGlzZWNvbmRzIGluIGRheSAgICAgICAgICAgIHxcbiAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAqIHwgIGMgIHwgU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsgIHwgIEMqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGYgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEYqIHwgRGF5IG9mIHdlZWsgaW4gbW9udGggICAgICAgICAgIHxcbiAqIHwgIGcqIHwgTW9kaWZpZWQgSnVsaWFuIGRheSAgICAgICAgICAgIHwgIEcgIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGkhIHwgSVNPIGRheSBvZiB3ZWVrICAgICAgICAgICAgICAgIHwgIEkhIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgIHxcbiAqIHwgIGoqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHwgIEoqIHwgTG9jYWxpemVkIGhvdXIgdy9vIGRheSBwZXJpb2QgIHxcbiAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGwqIHwgKGRlcHJlY2F0ZWQpICAgICAgICAgICAgICAgICAgIHwgIEwgIHwgU3RhbmQtYWxvbmUgbW9udGggICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG8hIHwgT3JkaW5hbCBudW1iZXIgbW9kaWZpZXIgICAgICAgIHwgIE8gIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHAhIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgIHwgIFAhIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgIHxcbiAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHIqIHwgUmVsYXRlZCBHcmVnb3JpYW4geWVhciAgICAgICAgIHwgIFIhIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAqIHwgIHUgIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgIHwgIFUqIHwgQ3ljbGljIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHYqIHwgVGltZXpvbmUgKGdlbmVyaWMgbm9uLWxvY2F0LikgIHwgIFYqIHwgVGltZXpvbmUgKGxvY2F0aW9uKSAgICAgICAgICAgIHxcbiAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHggIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgIHwgIFggIHwgVGltZXpvbmUgKElTTy04NjAxKSAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgIHxcbiAqIHwgIHogIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgISBhcmUgbm9uLXN0YW5kYXJkLCBidXQgaW1wbGVtZW50ZWQgYnkgZGF0ZS1mbnM6XG4gKiAtIGBvYCBtb2RpZmllcyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gdHVybiBpdCBpbnRvIGFuIG9yZGluYWwgKHNlZSBgZm9ybWF0YCBkb2NzKVxuICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICogICBpLmUuIDcgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gKiAtIGBJYCBpcyBJU08gd2VlayBvZiB5ZWFyLCBhcyBvcHBvc2VkIHRvIGB3YCB3aGljaCBpcyBsb2NhbCB3ZWVrIG9mIHllYXIuXG4gKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqICAgYFJgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSWAgYW5kIGBpYFxuICogICBmb3IgdW5pdmVyc2FsIElTTyB3ZWVrLW51bWJlcmluZyBkYXRlLCB3aGVyZWFzXG4gKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAqICAgZm9yIHdlZWstbnVtYmVyaW5nIGRhdGUgc3BlY2lmaWMgdG8gdGhlIGxvY2FsZS5cbiAqIC0gYFBgIGlzIGxvbmcgbG9jYWxpemVkIGRhdGUgZm9ybWF0XG4gKiAtIGBwYCBpcyBsb25nIGxvY2FsaXplZCB0aW1lIGZvcm1hdFxuICovXG5cbnZhciBmb3JtYXR0ZXJzID0ge1xuICAvLyBFcmFcbiAgRzogZnVuY3Rpb24gRyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZXJhID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpID4gMCA/IDEgOiAwO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEFELCBCQ1xuICAgICAgY2FzZSAnRyc6XG4gICAgICBjYXNlICdHRyc6XG4gICAgICBjYXNlICdHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQSwgQlxuICAgICAgY2FzZSAnR0dHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93J1xuICAgICAgICB9KTtcbiAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0XG4gICAgICBjYXNlICdHR0dHJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ3lvJykge1xuICAgICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHllYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICBZOiBmdW5jdGlvbiBZKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBzaWduZWRXZWVrWWVhciA9IGdldFVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgdmFyIHdlZWtZZWFyID0gc2lnbmVkV2Vla1llYXIgPiAwID8gc2lnbmVkV2Vla1llYXIgOiAxIC0gc2lnbmVkV2Vla1llYXI7XG5cbiAgICAvLyBUd28gZGlnaXQgeWVhclxuICAgIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgICAgdmFyIHR3b0RpZ2l0WWVhciA9IHdlZWtZZWFyICUgMTAwO1xuICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0d29EaWdpdFllYXIsIDIpO1xuICAgIH1cblxuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAnWW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrWWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICBSOiBmdW5jdGlvbiBSKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGlzb1dlZWtZZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGF0ZSk7XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRXh0ZW5kZWQgeWVhci4gVGhpcyBpcyBhIHNpbmdsZSBudW1iZXIgZGVzaWduYXRpbmcgdGhlIHllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0uXG4gIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBsb2NhbGl6ZXJzIGFyZSBCLkMuIHllYXJzOlxuICAvLyB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICAvLyB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICAvLyB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICAvLyB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICAvLyB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICAvLyBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gIC8vIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZC5cbiAgdTogZnVuY3Rpb24gdShkYXRlLCB0b2tlbikge1xuICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gUXVhcnRlclxuICBROiBmdW5jdGlvbiBRKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ1EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ1FRJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAnUW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ1FRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ1FRUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAnUVFRUSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBxdWFydGVyXG4gIHE6IGZ1bmN0aW9uIHEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAncSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAncXEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdxbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAncXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAncXFxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdxcXFxJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ00nOlxuICAgICAgY2FzZSAnTU0nOlxuICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLk0oZGF0ZSwgdG9rZW4pO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdNTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ01NTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdNTU1NJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgbW9udGhcbiAgTDogZnVuY3Rpb24gTChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTEwnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdMbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ0xMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTExMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ0xMTEwnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCB3ZWVrIG9mIHllYXJcbiAgdzogZnVuY3Rpb24gdyhkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2VlayA9IGdldFVUQ1dlZWsoZGF0ZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRva2VuID09PSAnd28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWsgb2YgeWVhclxuICBJOiBmdW5jdGlvbiBJKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBpc29XZWVrID0gZ2V0VVRDSVNPV2VlayhkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdJbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb1dlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnZG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0RhdGUoKSwge1xuICAgICAgICB1bml0OiAnZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBEYXkgb2YgeWVhclxuICBEOiBmdW5jdGlvbiBEKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZlllYXIgPSBnZXRVVENEYXlPZlllYXIoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnRG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXlPZlllYXIsIHtcbiAgICAgICAgdW5pdDogJ2RheU9mWWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRheU9mWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHdlZWtcbiAgRTogZnVuY3Rpb24gRShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ0UnOlxuICAgICAgY2FzZSAnRUUnOlxuICAgICAgY2FzZSAnRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdFRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ0VFRUUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIGRheSBvZiB3ZWVrXG4gIGU6IGZ1bmN0aW9uIGUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pXG4gICAgICBjYXNlICdlJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdlZSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlICdlbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2VlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2VlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnZWVlZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWtcbiAgYzogZnVuY3Rpb24gYyhkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKVxuICAgICAgY2FzZSAnYyc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnY2MnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlICdjbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2NjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnY2NjYyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uIGkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMlxuICAgICAgY2FzZSAnaSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTtcbiAgICAgIC8vIDAyXG4gICAgICBjYXNlICdpaSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMm5kXG4gICAgICBjYXNlICdpbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb0RheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2lpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2lpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnaWlpaSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNLCBQTSwgbWlkbmlnaHQsIG5vb25cbiAgYjogZnVuY3Rpb24gYihkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPT09IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA9PT0gMCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5taWRuaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2InOlxuICAgICAgY2FzZSAnYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2JiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlICdiYmJiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2JiYmInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHRcbiAgQjogZnVuY3Rpb24gQihkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPj0gMTcpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uZXZlbmluZztcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmFmdGVybm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDQpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubW9ybmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5uaWdodDtcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnQic6XG4gICAgICBjYXNlICdCQic6XG4gICAgICBjYXNlICdCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdobycpIHtcbiAgICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdIbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDSG91cnMoKSwge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLkgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTExXVxuICBLOiBmdW5jdGlvbiBLKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgIGlmICh0b2tlbiA9PT0gJ0tvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24gayhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDI0O1xuICAgIGlmICh0b2tlbiA9PT0gJ2tvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnbW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ01pbnV0ZXMoKSwge1xuICAgICAgICB1bml0OiAnbWludXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMubShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ3NvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHtcbiAgICAgICAgdW5pdDogJ3NlY29uZCdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuUyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApXG4gIFg6IGZ1bmN0aW9uIFgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZiAodGltZXpvbmVPZmZzZXQgPT09IDApIHtcbiAgICAgIHJldHVybiAnWic7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICdYJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYYFxuICAgICAgY2FzZSAnWFhYWCc6XG4gICAgICBjYXNlICdYWCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWFhgXG4gICAgICBjYXNlICdYWFhYWCc6XG4gICAgICBjYXNlICdYWFgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpXG4gIHg6IGZ1bmN0aW9uIHgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAneCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eGBcbiAgICAgIGNhc2UgJ3h4eHgnOlxuICAgICAgY2FzZSAneHgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHh4YFxuICAgICAgY2FzZSAneHh4eHgnOlxuICAgICAgY2FzZSAneHh4JzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoR01UKVxuICBPOiBmdW5jdGlvbiBPKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ08nOlxuICAgICAgY2FzZSAnT08nOlxuICAgICAgY2FzZSAnT09PJzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgJ09PT08nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0aW9uKVxuICB6OiBmdW5jdGlvbiB6KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ3onOlxuICAgICAgY2FzZSAnenonOlxuICAgICAgY2FzZSAnenp6JzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgJ3p6enonOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBTZWNvbmRzIHRpbWVzdGFtcFxuICB0OiBmdW5jdGlvbiB0KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IE1hdGguZmxvb3Iob3JpZ2luYWxEYXRlLmdldFRpbWUoKSAvIDEwMDApO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gIFQ6IGZ1bmN0aW9uIFQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gb3JpZ2luYWxEYXRlLmdldFRpbWUoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lU2hvcnQob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKTtcbiAgdmFyIG1pbnV0ZXMgPSBhYnNPZmZzZXQgJSA2MDtcbiAgaWYgKG1pbnV0ZXMgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiArIFN0cmluZyhob3Vycyk7XG4gIH1cbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICByZXR1cm4gc2lnbiArIFN0cmluZyhob3VycykgKyBkZWxpbWl0ZXIgKyBhZGRMZWFkaW5nWmVyb3MobWludXRlcywgMik7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICBpZiAob2Zmc2V0ICUgNjAgPT09IDApIHtcbiAgICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gICAgcmV0dXJuIHNpZ24gKyBhZGRMZWFkaW5nWmVyb3MoTWF0aC5hYnMob2Zmc2V0KSAvIDYwLCAyKTtcbiAgfVxuICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcik7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApLCAyKTtcbiAgdmFyIG1pbnV0ZXMgPSBhZGRMZWFkaW5nWmVyb3MoYWJzT2Zmc2V0ICUgNjAsIDIpO1xuICByZXR1cm4gc2lnbiArIGhvdXJzICsgZGVsaW1pdGVyICsgbWludXRlcztcbn1cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgInZhciBkYXRlTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcbnZhciB0aW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIHRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAncCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwcCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcbnZhciBkYXRlVGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlVGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICB2YXIgbWF0Y2hSZXN1bHQgPSBwYXR0ZXJuLm1hdGNoKC8oUCspKHArKT8vKSB8fCBbXTtcbiAgdmFyIGRhdGVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMV07XG4gIHZhciB0aW1lUGF0dGVybiA9IG1hdGNoUmVzdWx0WzJdO1xuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG4gIHZhciBkYXRlVGltZUZvcm1hdDtcbiAgc3dpdGNoIChkYXRlUGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCd7e2RhdGV9fScsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nKSkucmVwbGFjZSgne3t0aW1lfX0nLCB0aW1lTG9uZ0Zvcm1hdHRlcih0aW1lUGF0dGVybiwgZm9ybWF0TG9uZykpO1xufTtcbnZhciBsb25nRm9ybWF0dGVycyA9IHtcbiAgcDogdGltZUxvbmdGb3JtYXR0ZXIsXG4gIFA6IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlclxufTtcbmV4cG9ydCBkZWZhdWx0IGxvbmdGb3JtYXR0ZXJzOyIsICIvKipcbiAqIEdvb2dsZSBDaHJvbWUgYXMgb2YgNjcuMC4zMzk2Ljg3IGludHJvZHVjZWQgdGltZXpvbmVzIHdpdGggb2Zmc2V0IHRoYXQgaW5jbHVkZXMgc2Vjb25kcy5cbiAqIFRoZXkgdXN1YWxseSBhcHBlYXIgZm9yIGRhdGVzIHRoYXQgZGVub3RlIHRpbWUgYmVmb3JlIHRoZSB0aW1lem9uZXMgd2VyZSBpbnRyb2R1Y2VkXG4gKiAoZS5nLiBmb3IgJ0V1cm9wZS9QcmFndWUnIHRpbWV6b25lIHRoZSBvZmZzZXQgaXMgR01UKzAwOjU3OjQ0IGJlZm9yZSAxIE9jdG9iZXIgMTg5MVxuICogYW5kIEdNVCswMTowMDowMCBhZnRlciB0aGF0IGRhdGUpXG4gKlxuICogRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIHRoZSBvZmZzZXQgaW4gbWludXRlcyBhbmQgd291bGQgcmV0dXJuIDU3IGZvciB0aGUgZXhhbXBsZSBhYm92ZSxcbiAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWV6b25lIG9mZnNldCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0YWtlcyBzZWNvbmRzIGluIGFjY291bnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkge1xuICB2YXIgdXRjRGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCksIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpKTtcbiAgdXRjRGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgLSB1dGNEYXRlLmdldFRpbWUoKTtcbn0iLCAidmFyIHByb3RlY3RlZERheU9mWWVhclRva2VucyA9IFsnRCcsICdERCddO1xudmFyIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zID0gWydZWScsICdZWVlZJ107XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGlmICh0b2tlbiA9PT0gJ1lZWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0QnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRgIGluc3RlYWQgb2YgYERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0REJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfVxufSIsICJ2YXIgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBzZWNvbmQnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICB4U2Vjb25kczoge1xuICAgIG9uZTogJzEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICBoYWxmQU1pbnV0ZTogJ2hhbGYgYSBtaW51dGUnLFxuICBsZXNzVGhhblhNaW51dGVzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgbWludXRlJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6ICcxIG1pbnV0ZScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgYWJvdXRYSG91cnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIGhvdXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4SG91cnM6IHtcbiAgICBvbmU6ICcxIGhvdXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4RGF5czoge1xuICAgIG9uZTogJzEgZGF5JyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBkYXlzJ1xuICB9LFxuICBhYm91dFhXZWVrczoge1xuICAgIG9uZTogJ2Fib3V0IDEgd2VlaycsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIHhXZWVrczoge1xuICAgIG9uZTogJzEgd2VlaycsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogJ2Fib3V0IDEgbW9udGgnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgeE1vbnRoczoge1xuICAgIG9uZTogJzEgbW9udGgnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIHllYXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICB4WWVhcnM6IHtcbiAgICBvbmU6ICcxIHllYXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBvdmVyWFllYXJzOiB7XG4gICAgb25lOiAnb3ZlciAxIHllYXInLFxuICAgIG90aGVyOiAnb3ZlciB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIGFsbW9zdFhZZWFyczoge1xuICAgIG9uZTogJ2FsbW9zdCAxIHllYXInLFxuICAgIG90aGVyOiAnYWxtb3N0IHt7Y291bnR9fSB5ZWFycydcbiAgfVxufTtcbnZhciBmb3JtYXREaXN0YW5jZSA9IGZ1bmN0aW9uIGZvcm1hdERpc3RhbmNlKHRva2VuLCBjb3VudCwgb3B0aW9ucykge1xuICB2YXIgcmVzdWx0O1xuICB2YXIgdG9rZW5WYWx1ZSA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXTtcbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWU7XG4gIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm9uZTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm90aGVyLnJlcGxhY2UoJ3t7Y291bnR9fScsIGNvdW50LnRvU3RyaW5nKCkpO1xuICB9XG4gIGlmIChvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLmFkZFN1ZmZpeCkge1xuICAgIGlmIChvcHRpb25zLmNvbXBhcmlzb24gJiYgb3B0aW9ucy5jb21wYXJpc29uID4gMCkge1xuICAgICAgcmV0dXJuICdpbiAnICsgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgJyBhZ28nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdERpc3RhbmNlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZvcm1hdExvbmdGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIC8vIFRPRE86IFJlbW92ZSBTdHJpbmcoKVxuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICB2YXIgZm9ybWF0ID0gYXJncy5mb3JtYXRzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHNbYXJncy5kZWZhdWx0V2lkdGhdO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH07XG59IiwgImltcG9ydCBidWlsZEZvcm1hdExvbmdGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZEZvcm1hdExvbmdGbi9pbmRleC5qc1wiO1xudmFyIGRhdGVGb3JtYXRzID0ge1xuICBmdWxsOiAnRUVFRSwgTU1NTSBkbywgeScsXG4gIGxvbmc6ICdNTU1NIGRvLCB5JyxcbiAgbWVkaXVtOiAnTU1NIGQsIHknLFxuICBzaG9ydDogJ01NL2RkL3l5eXknXG59O1xudmFyIHRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiAnaDptbTpzcyBhIHp6enonLFxuICBsb25nOiAnaDptbTpzcyBhIHonLFxuICBtZWRpdW06ICdoOm1tOnNzIGEnLFxuICBzaG9ydDogJ2g6bW0gYSdcbn07XG52YXIgZGF0ZVRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbG9uZzogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIG1lZGl1bTogJ3t7ZGF0ZX19LCB7e3RpbWV9fScsXG4gIHNob3J0OiAne3tkYXRlfX0sIHt7dGltZX19J1xufTtcbnZhciBmb3JtYXRMb25nID0ge1xuICBkYXRlOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIHRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiB0aW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgZGF0ZVRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlVGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRMb25nOyIsICJ2YXIgZm9ybWF0UmVsYXRpdmVMb2NhbGUgPSB7XG4gIGxhc3RXZWVrOiBcIidsYXN0JyBlZWVlICdhdCcgcFwiLFxuICB5ZXN0ZXJkYXk6IFwiJ3llc3RlcmRheSBhdCcgcFwiLFxuICB0b2RheTogXCIndG9kYXkgYXQnIHBcIixcbiAgdG9tb3Jyb3c6IFwiJ3RvbW9ycm93IGF0JyBwXCIsXG4gIG5leHRXZWVrOiBcImVlZWUgJ2F0JyBwXCIsXG4gIG90aGVyOiAnUCdcbn07XG52YXIgZm9ybWF0UmVsYXRpdmUgPSBmdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZSh0b2tlbiwgX2RhdGUsIF9iYXNlRGF0ZSwgX29wdGlvbnMpIHtcbiAgcmV0dXJuIGZvcm1hdFJlbGF0aXZlTG9jYWxlW3Rva2VuXTtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRSZWxhdGl2ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRMb2NhbGl6ZUZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkaXJ0eUluZGV4LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLmNvbnRleHQgPyBTdHJpbmcob3B0aW9ucy5jb250ZXh0KSA6ICdzdGFuZGFsb25lJztcbiAgICB2YXIgdmFsdWVzQXJyYXk7XG4gICAgaWYgKGNvbnRleHQgPT09ICdmb3JtYXR0aW5nJyAmJiBhcmdzLmZvcm1hdHRpbmdWYWx1ZXMpIHtcbiAgICAgIHZhciBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRGb3JtYXR0aW5nV2lkdGggfHwgYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2RlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIF93aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy52YWx1ZXNbX3dpZHRoXSB8fCBhcmdzLnZhbHVlc1tfZGVmYXVsdFdpZHRoXTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gYXJncy5hcmd1bWVudENhbGxiYWNrID8gYXJncy5hcmd1bWVudENhbGxiYWNrKGRpcnR5SW5kZXgpIDogZGlydHlJbmRleDtcbiAgICAvLyBAdHMtaWdub3JlOiBGb3Igc29tZSByZWFzb24gVHlwZVNjcmlwdCBqdXN0IGRvbid0IHdhbnQgdG8gbWF0Y2ggaXQsIG5vIG1hdHRlciBob3cgaGFyZCB3ZSB0cnkuIEkgY2hhbGxlbmdlIHlvdSB0byB0cnkgdG8gcmVtb3ZlIGl0IVxuICAgIHJldHVybiB2YWx1ZXNBcnJheVtpbmRleF07XG4gIH07XG59IiwgImltcG9ydCBidWlsZExvY2FsaXplRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRMb2NhbGl6ZUZuL2luZGV4LmpzXCI7XG52YXIgZXJhVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnQicsICdBJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0JDJywgJ0FEJ10sXG4gIHdpZGU6IFsnQmVmb3JlIENocmlzdCcsICdBbm5vIERvbWluaSddXG59O1xudmFyIHF1YXJ0ZXJWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWycxJywgJzInLCAnMycsICc0J10sXG4gIGFiYnJldmlhdGVkOiBbJ1ExJywgJ1EyJywgJ1EzJywgJ1E0J10sXG4gIHdpZGU6IFsnMXN0IHF1YXJ0ZXInLCAnMm5kIHF1YXJ0ZXInLCAnM3JkIHF1YXJ0ZXInLCAnNHRoIHF1YXJ0ZXInXVxufTtcblxuLy8gTm90ZTogaW4gRW5nbGlzaCwgdGhlIG5hbWVzIG9mIGRheXMgb2YgdGhlIHdlZWsgYW5kIG1vbnRocyBhcmUgY2FwaXRhbGl6ZWQuXG4vLyBJZiB5b3UgYXJlIG1ha2luZyBhIG5ldyBsb2NhbGUgYmFzZWQgb24gdGhpcyBvbmUsIGNoZWNrIGlmIHRoZSBzYW1lIGlzIHRydWUgZm9yIHRoZSBsYW5ndWFnZSB5b3UncmUgd29ya2luZyBvbi5cbi8vIEdlbmVyYWxseSwgZm9ybWF0dGVkIGRhdGVzIHNob3VsZCBsb29rIGxpa2UgdGhleSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHNlbnRlbmNlLFxuLy8gZS5nLiBpbiBTcGFuaXNoIGxhbmd1YWdlIHRoZSB3ZWVrZGF5cyBhbmQgbW9udGhzIHNob3VsZCBiZSBpbiB0aGUgbG93ZXJjYXNlLlxudmFyIG1vbnRoVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnSicsICdGJywgJ00nLCAnQScsICdNJywgJ0onLCAnSicsICdBJywgJ1MnLCAnTycsICdOJywgJ0QnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcbiAgd2lkZTogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ11cbn07XG52YXIgZGF5VmFsdWVzID0ge1xuICBuYXJyb3c6IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddLFxuICBzaG9ydDogWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddLFxuICBhYmJyZXZpYXRlZDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcbiAgd2lkZTogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddXG59O1xudmFyIGRheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9XG59O1xudmFyIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfVxufTtcbnZhciBvcmRpbmFsTnVtYmVyID0gZnVuY3Rpb24gb3JkaW5hbE51bWJlcihkaXJ0eU51bWJlciwgX29wdGlvbnMpIHtcbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgLy8gSWYgb3JkaW5hbCBudW1iZXJzIGRlcGVuZCBvbiBjb250ZXh0LCBmb3IgZXhhbXBsZSxcbiAgLy8gaWYgdGhleSBhcmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgZ3JhbW1hdGljYWwgZ2VuZGVycyxcbiAgLy8gdXNlIGBvcHRpb25zLnVuaXRgLlxuICAvL1xuICAvLyBgdW5pdGAgY2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXRlJywgJ2RheU9mWWVhcicsXG4gIC8vICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJy5cblxuICB2YXIgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuICBpZiAocmVtMTAwID4gMjAgfHwgcmVtMTAwIDwgMTApIHtcbiAgICBzd2l0Y2ggKHJlbTEwMCAlIDEwKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnc3QnO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ25kJztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdyZCc7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW1iZXIgKyAndGgnO1xufTtcbnZhciBsb2NhbGl6ZSA9IHtcbiAgb3JkaW5hbE51bWJlcjogb3JkaW5hbE51bWJlcixcbiAgZXJhOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZXJhVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogcXVhcnRlclZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJyxcbiAgICBhcmd1bWVudENhbGxiYWNrOiBmdW5jdGlvbiBhcmd1bWVudENhbGxiYWNrKHF1YXJ0ZXIpIHtcbiAgICAgIHJldHVybiBxdWFydGVyIC0gMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXk6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJyxcbiAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6ICd3aWRlJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsaXplOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoO1xuICAgIHZhciBtYXRjaFBhdHRlcm4gPSB3aWR0aCAmJiBhcmdzLm1hdGNoUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MubWF0Y2hQYXR0ZXJuc1thcmdzLmRlZmF1bHRNYXRjaFdpZHRoXTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2gobWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VQYXR0ZXJucyA9IHdpZHRoICYmIGFyZ3MucGFyc2VQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5wYXJzZVBhdHRlcm5zW2FyZ3MuZGVmYXVsdFBhcnNlV2lkdGhdO1xuICAgIHZhciBrZXkgPSBBcnJheS5pc0FycmF5KHBhcnNlUGF0dGVybnMpID8gZmluZEluZGV4KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pIDogZmluZEtleShwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KTtcbiAgICB2YXIgdmFsdWU7XG4gICAgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2soa2V5KSA6IGtleTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufVxuZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHByZWRpY2F0ZShvYmplY3Rba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBrZXkgPSAwOyBrZXkgPCBhcnJheS5sZW5ndGg7IGtleSsrKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhwYXJzZVJlc3VsdFswXSkgOiBwYXJzZVJlc3VsdFswXTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRNYXRjaEZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qc1wiO1xuaW1wb3J0IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi9pbmRleC5qc1wiO1xudmFyIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcXGQrKSh0aHxzdHxuZHxyZCk/L2k7XG52YXIgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9cXGQrL2k7XG52YXIgbWF0Y2hFcmFQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihifGEpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihiXFwuP1xccz9jXFwuP3xiXFwuP1xccz9jXFwuP1xccz9lXFwuP3xhXFwuP1xccz9kXFwuP3xjXFwuP1xccz9lXFwuPykvaSxcbiAgd2lkZTogL14oYmVmb3JlIGNocmlzdHxiZWZvcmUgY29tbW9uIGVyYXxhbm5vIGRvbWluaXxjb21tb24gZXJhKS9pXG59O1xudmFyIHBhcnNlRXJhUGF0dGVybnMgPSB7XG4gIGFueTogWy9eYi9pLCAvXihhfGMpL2ldXG59O1xudmFyIG1hdGNoUXVhcnRlclBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eWzEyMzRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXnFbMTIzNF0vaSxcbiAgd2lkZTogL15bMTIzNF0odGh8c3R8bmR8cmQpPyBxdWFydGVyL2lcbn07XG52YXIgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7XG4gIGFueTogWy8xL2ksIC8yL2ksIC8zL2ksIC80L2ldXG59O1xudmFyIG1hdGNoTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltqZm1hc29uZF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLFxuICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pXG59O1xudmFyIHBhcnNlTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15qL2ksIC9eZi9pLCAvXm0vaSwgL15hL2ksIC9ebS9pLCAvXmovaSwgL15qL2ksIC9eYS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV0sXG4gIGFueTogWy9eamEvaSwgL15mL2ksIC9ebWFyL2ksIC9eYXAvaSwgL15tYXkvaSwgL15qdW4vaSwgL15qdWwvaSwgL15hdS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV1cbn07XG52YXIgbWF0Y2hEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltzbXR3Zl0vaSxcbiAgc2hvcnQ6IC9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0KS9pLFxuICB3aWRlOiAvXihzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSkvaVxufTtcbnZhciBwYXJzZURheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXnMvaSwgL15tL2ksIC9edC9pLCAvXncvaSwgL150L2ksIC9eZi9pLCAvXnMvaV0sXG4gIGFueTogWy9ec3UvaSwgL15tL2ksIC9edHUvaSwgL153L2ksIC9edGgvaSwgL15mL2ksIC9ec2EvaV1cbn07XG52YXIgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksXG4gIGFueTogL14oW2FwXVxcLj9cXHM/bVxcLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2lcbn07XG52YXIgcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgYW55OiB7XG4gICAgYW06IC9eYS9pLFxuICAgIHBtOiAvXnAvaSxcbiAgICBtaWRuaWdodDogL15taS9pLFxuICAgIG5vb246IC9ebm8vaSxcbiAgICBtb3JuaW5nOiAvbW9ybmluZy9pLFxuICAgIGFmdGVybm9vbjogL2FmdGVybm9vbi9pLFxuICAgIGV2ZW5pbmc6IC9ldmVuaW5nL2ksXG4gICAgbmlnaHQ6IC9uaWdodC9pXG4gIH1cbn07XG52YXIgbWF0Y2ggPSB7XG4gIG9yZGluYWxOdW1iZXI6IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oe1xuICAgIG1hdGNoUGF0dGVybjogbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICBwYXJzZVBhdHRlcm46IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuICB9KSxcbiAgZXJhOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZUVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55JyxcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggKyAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnYW55JyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IG1hdGNoOyIsICJpbXBvcnQgZm9ybWF0RGlzdGFuY2UgZnJvbSBcIi4vX2xpYi9mb3JtYXREaXN0YW5jZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdExvbmcgZnJvbSBcIi4vX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0UmVsYXRpdmUgZnJvbSBcIi4vX2xpYi9mb3JtYXRSZWxhdGl2ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGxvY2FsaXplIGZyb20gXCIuL19saWIvbG9jYWxpemUvaW5kZXguanNcIjtcbmltcG9ydCBtYXRjaCBmcm9tIFwiLi9fbGliL21hdGNoL2luZGV4LmpzXCI7XG4vKipcbiAqIEB0eXBlIHtMb2NhbGV9XG4gKiBAY2F0ZWdvcnkgTG9jYWxlc1xuICogQHN1bW1hcnkgRW5nbGlzaCBsb2NhbGUgKFVuaXRlZCBTdGF0ZXMpLlxuICogQGxhbmd1YWdlIEVuZ2xpc2hcbiAqIEBpc28tNjM5LTIgZW5nXG4gKiBAYXV0aG9yIFNhc2hhIEtvc3MgW0Brb3Nzbm9jb3JwXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20va29zc25vY29ycH1cbiAqIEBhdXRob3IgTGVzaGEgS29zcyBbQGxlc2hha29zc117QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xlc2hha29zc31cbiAqL1xudmFyIGxvY2FsZSA9IHtcbiAgY29kZTogJ2VuLVVTJyxcbiAgZm9ybWF0RGlzdGFuY2U6IGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXRMb25nOiBmb3JtYXRMb25nLFxuICBmb3JtYXRSZWxhdGl2ZTogZm9ybWF0UmVsYXRpdmUsXG4gIGxvY2FsaXplOiBsb2NhbGl6ZSxcbiAgbWF0Y2g6IG1hdGNoLFxuICBvcHRpb25zOiB7XG4gICAgd2Vla1N0YXJ0c09uOiAwIC8qIFN1bmRheSAqLyxcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDFcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsZTsiLCAiaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uLy4uL2xvY2FsZS9lbi1VUy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdExvY2FsZTsiLCAiaW1wb3J0IGlzVmFsaWQgZnJvbSBcIi4uL2lzVmFsaWQvaW5kZXguanNcIjtcbmltcG9ydCBzdWJNaWxsaXNlY29uZHMgZnJvbSBcIi4uL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvZm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGxvbmdGb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbiwgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuLCB0aHJvd1Byb3RlY3RlZEVycm9yIH0gZnJvbSBcIi4uL19saWIvcHJvdGVjdGVkVG9rZW5zL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi9fbGliL2RlZmF1bHRMb2NhbGUvaW5kZXguanNcIjsgLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG52YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcXHcpXFwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuLy8gVGhpcyBSZWdFeHAgY2F0Y2hlcyBzeW1ib2xzIGVzY2FwZWQgYnkgcXVvdGVzLCBhbmQgYWxzb1xuLy8gc2VxdWVuY2VzIG9mIHN5bWJvbHMgUCwgcCwgYW5kIHRoZSBjb21iaW5hdGlvbnMgbGlrZSBgUFBQUFBQUHBwcHBwYFxudmFyIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG52YXIgZXNjYXBlZFN0cmluZ1JlZ0V4cCA9IC9eJyhbXl0qPyknPyQvO1xudmFyIGRvdWJsZVF1b3RlUmVnRXhwID0gLycnL2c7XG52YXIgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vO1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXQgdGhlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LiBUaGUgcmVzdWx0IG1heSB2YXJ5IGJ5IGxvY2FsZS5cbiAqXG4gKiA+IFx1MjZBMFx1RkUwRiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBgZm9ybWF0YCB0b2tlbnMgZGlmZmVyIGZyb20gTW9tZW50LmpzIGFuZCBvdGhlciBsaWJyYXJpZXMuXG4gKiA+IFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIFRoZSBjaGFyYWN0ZXJzIHdyYXBwZWQgYmV0d2VlbiB0d28gc2luZ2xlIHF1b3RlcyBjaGFyYWN0ZXJzICgnKSBhcmUgZXNjYXBlZC5cbiAqIFR3byBzaW5nbGUgcXVvdGVzIGluIGEgcm93LCB3aGV0aGVyIGluc2lkZSBvciBvdXRzaWRlIGEgcXVvdGVkIHNlcXVlbmNlLCByZXByZXNlbnQgYSAncmVhbCcgc2luZ2xlIHF1b3RlLlxuICogKHNlZSB0aGUgbGFzdCBleGFtcGxlKVxuICpcbiAqIEZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGJhc2VkIG9uIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGVcbiAqIHdpdGggYSBmZXcgYWRkaXRpb25zIChzZWUgbm90ZSA3IGJlbG93IHRoZSB0YWJsZSkuXG4gKlxuICogQWNjZXB0ZWQgcGF0dGVybnM6XG4gKiB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXR0ZXJuIHwgUmVzdWx0IGV4YW1wbGVzICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLXxcbiAqIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEcuLkdHRyAgfCBBRCwgQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHICAgIHwgQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3QgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHR0cgICB8IEEsIEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ2FsZW5kYXIgeWVhciAgICAgICAgICAgICAgICAgICB8IHkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5byAgICAgIHwgNDR0aCwgMXN0LCAwdGgsIDE3dGggICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5ICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eXkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICB8IFkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZbyAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDIwMTd0aCAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWVkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgICB8IFIgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUiAgICAgIHwgLTQzLCAwMCwgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSICAgICB8IC0wNDMsIDAwMCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlIgICAgfCAtMDA0MywgMDAwMCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSUiAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1LDcgfFxuICogfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgIHwgdSAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1ICAgICAgfCAtNDMsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXUgICAgIHwgLTA0MywgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dSAgICB8IC0wMDQzLCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXV1ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IFF1YXJ0ZXIgKGZvcm1hdHRpbmcpICAgICAgICAgICAgfCBRICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVFRICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IFF1YXJ0ZXIgKHN0YW5kLWFsb25lKSAgICAgICAgICAgfCBxICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXFxICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IE1vbnRoIChmb3JtYXR0aW5nKSAgICAgICAgICAgICAgfCBNICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU0gICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTSAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU1NICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1vbnRoIChzdGFuZC1hbG9uZSkgICAgICAgICAgICAgfCBMICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTEwgICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTCAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTExMICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgfCB3ICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHd3ICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICAgfCBJICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElJICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICAgfCBkICAgICAgIHwgMSwgMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDMxc3QgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRkICAgICAgfCAwMSwgMDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICAgfCBEICAgICAgIHwgMSwgMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDM2NXRoLCAzNjZ0aCAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREICAgICAgfCAwMSwgMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREQgICAgIHwgMDAxLCAwMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRERERCAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgRGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgICAgICB8IEUuLkVFRSAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFRSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgfCBpICAgICAgIHwgMSwgMiwgMywgLi4uLCA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDd0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpICAgICAgfCAwMSwgMDIsIC4uLiwgMDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWkgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaWkgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgNyAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgIHwgZSAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZSAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWVlICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKHN0YW5kLWFsb25lKSB8IGMgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2MgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjYyAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2MgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjYyAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhLi5hYSAgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhICAgICB8IGFtLCBwbSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWEgICAgfCBhLm0uLCBwLm0uICAgICAgICAgICAgICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhYSAgIHwgYSwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgIHwgYi4uYmIgICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYiAgICAgfCBhbSwgcG0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiICAgIHwgYS5tLiwgcC5tLiwgbm9vbiwgbWlkbmlnaHQgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYmIgICB8IGEsIHAsIG4sIG1pICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgICB8IEIuLkJCQiAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCICAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQkIgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgICB8IGggICAgICAgfCAxLCAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBobyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMTJ0aCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGggICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgICB8IEggICAgICAgfCAwLCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIbyAgICAgIHwgMHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEggICAgICB8IDAwLCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgICB8IEsgICAgICAgfCAxLCAyLCAuLi4sIDExLCAwICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMHRoICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS0sgICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgICB8IGsgICAgICAgfCAyNCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrbyAgICAgIHwgMjR0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2sgICAgICB8IDI0LCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICB8IHMgICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3MgICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgICB8IFMgICAgICAgfCAwLCAxLCAuLi4sIDkgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTICAgICB8IDAwMCwgMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTU1MgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3LyBaKSAgICAgICAgfCBYICAgICAgIHwgLTA4LCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFggICAgICB8IC0wODAwLCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWCAgICAgfCAtMDg6MDAsICswNTozMCwgWiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYICAgIHwgLTA4MDAsICswNTMwLCBaLCArMTIzNDU2ICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWFggICB8IC0wODowMCwgKzA1OjMwLCBaLCArMTI6MzQ6NTYgICAgICB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgICB8IHggICAgICAgfCAtMDgsICswNTMwLCArMDAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eCAgICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4ICAgICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHggICAgfCAtMDgwMCwgKzA1MzAsICswMDAwLCArMTIzNDU2ICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4eCAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCwgKzEyOjM0OjU2IHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgIHwgTy4uLk9PTyB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9PT08gICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyICAgICB8XG4gKiB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSAgfCB6Li4uenp6IHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgNiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgenp6eiAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIsNiAgIHxcbiAqIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgICB8IHQgICAgICAgfCA1MTI5Njk1MjAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0dCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgIHwgVCAgICAgICB8IDUxMjk2OTUyMDkwMCAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRUICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICAgfCBQICAgICAgIHwgMDQvMjkvMTQ1MyAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFAgICAgICB8IEFwciAyOSwgMTQ1MyAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUCAgICAgfCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQICAgIHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgIHwgcCAgICAgICB8IDEyOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwICAgICAgfCAxMjowMDowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHAgICAgIHwgMTI6MDA6MDAgQU0gR01UKzIgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwcCAgICB8IDEyOjAwOjAwIEFNIEdNVCswMjowMCAgICAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgQ29tYmluYXRpb24gb2YgZGF0ZSBhbmQgdGltZSAgICB8IFBwICAgICAgfCAwNC8yOS8xNDUzLCAxMjowMCBBTSAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUHBwICAgIHwgQXByIDI5LCAxNDUzLCAxMjowMDowMCBBTSAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQcHBwICB8IEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFBwcHBwfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgfCAyLDcgICB8XG4gKiBOb3RlczpcbiAqIDEuIFwiRm9ybWF0dGluZ1wiIHVuaXRzIChlLmcuIGZvcm1hdHRpbmcgcXVhcnRlcikgaW4gdGhlIGRlZmF1bHQgZW4tVVMgbG9jYWxlXG4gKiAgICBhcmUgdGhlIHNhbWUgYXMgXCJzdGFuZC1hbG9uZVwiIHVuaXRzLCBidXQgYXJlIGRpZmZlcmVudCBpbiBzb21lIGxhbmd1YWdlcy5cbiAqICAgIFwiRm9ybWF0dGluZ1wiIHVuaXRzIGFyZSBkZWNsaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsYW5ndWFnZVxuICogICAgaW4gdGhlIGNvbnRleHQgb2YgYSBkYXRlLiBcIlN0YW5kLWFsb25lXCIgdW5pdHMgYXJlIGFsd2F5cyBub21pbmF0aXZlIHNpbmd1bGFyOlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTExMTCcsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWQnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTU1NTScsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWR1J2BcbiAqXG4gKiAyLiBBbnkgc2VxdWVuY2Ugb2YgdGhlIGlkZW50aWNhbCBsZXR0ZXJzIGlzIGEgcGF0dGVybiwgdW5sZXNzIGl0IGlzIGVzY2FwZWQgYnlcbiAqICAgIHRoZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoc2VlIGJlbG93KS5cbiAqICAgIElmIHRoZSBzZXF1ZW5jZSBpcyBsb25nZXIgdGhhbiBsaXN0ZWQgaW4gdGFibGUgKGUuZy4gYEVFRUVFRUVFRUVFYClcbiAqICAgIHRoZSBvdXRwdXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBkZWZhdWx0IHBhdHRlcm4gZm9yIHRoaXMgdW5pdCwgdXN1YWxseVxuICogICAgdGhlIGxvbmdlc3Qgb25lIChpbiBjYXNlIG9mIElTTyB3ZWVrZGF5cywgYEVFRUVgKS4gRGVmYXVsdCBwYXR0ZXJucyBmb3IgdW5pdHNcbiAqICAgIGFyZSBtYXJrZWQgd2l0aCBcIjJcIiBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NJykgLy89PiAnTm92J2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTScpIC8vPT4gJ04nYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAzLiBTb21lIHBhdHRlcm5zIGNvdWxkIGJlIHVubGltaXRlZCBsZW5ndGggKHN1Y2ggYXMgYHl5eXl5eXl5YCkuXG4gKiAgICBUaGUgb3V0cHV0IHdpbGwgYmUgcGFkZGVkIHdpdGggemVyb3MgdG8gbWF0Y2ggdGhlIGxlbmd0aCBvZiB0aGUgcGF0dGVybi5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ3l5eXl5eXl5JykgLy89PiAnMDAwMDIwMTcnYFxuICpcbiAqIDQuIGBRUVFRUWAgYW5kIGBxcXFxcWAgY291bGQgYmUgbm90IHN0cmljdGx5IG51bWVyaWNhbCBpbiBzb21lIGxvY2FsZXMuXG4gKiAgICBUaGVzZSB0b2tlbnMgcmVwcmVzZW50IHRoZSBzaG9ydGVzdCBmb3JtIG9mIHRoZSBxdWFydGVyLlxuICpcbiAqIDUuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBwYXR0ZXJucyBhcmUgQi5DLiB5ZWFyczpcbiAqXG4gKiAgICB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICogICAgfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAqICAgIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gKiAgICB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICogICAgfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAqXG4gKiAgICBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gKiAgICB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQ6XG4gKlxuICogICAgfCBZZWFyIHwgYHl5YCB8IGB1dWAgfFxuICogICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuICogICAgfCAxICAgIHwgICAwMSB8ICAgMDEgfFxuICogICAgfCAxNCAgIHwgICAxNCB8ICAgMTQgfFxuICogICAgfCAzNzYgIHwgICA3NiB8ICAzNzYgfFxuICogICAgfCAxNDUzIHwgICA1MyB8IDE0NTMgfFxuICpcbiAqICAgIFRoZSBzYW1lIGRpZmZlcmVuY2UgaXMgdHJ1ZSBmb3IgbG9jYWwgYW5kIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyAoYFlgIGFuZCBgUmApLFxuICogICAgZXhjZXB0IGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBkZXBlbmRlbnQgb24gYG9wdGlvbnMud2Vla1N0YXJ0c09uYFxuICogICAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKGNvbXBhcmUgW2dldElTT1dlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldElTT1dlZWtZZWFyfVxuICogICAgYW5kIFtnZXRXZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRXZWVrWWVhcn0pLlxuICpcbiAqIDYuIFNwZWNpZmljIG5vbi1sb2NhdGlvbiB0aW1lem9uZXMgYXJlIGN1cnJlbnRseSB1bmF2YWlsYWJsZSBpbiBgZGF0ZS1mbnNgLFxuICogICAgc28gcmlnaHQgbm93IHRoZXNlIHRva2VucyBmYWxsIGJhY2sgdG8gR01UIHRpbWV6b25lcy5cbiAqXG4gKiA3LiBUaGVzZSBwYXR0ZXJucyBhcmUgbm90IGluIHRoZSBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiAgICAtIGBpYDogSVNPIGRheSBvZiB3ZWVrXG4gKiAgICAtIGBJYDogSVNPIHdlZWsgb2YgeWVhclxuICogICAgLSBgUmA6IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKiAgICAtIGB0YDogc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYFRgOiBtaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBvYDogb3JkaW5hbCBudW1iZXIgbW9kaWZpZXJcbiAqICAgIC0gYFBgOiBsb25nIGxvY2FsaXplZCBkYXRlXG4gKiAgICAtIGBwYDogbG9uZyBsb2NhbGl6ZWQgdGltZVxuICpcbiAqIDguIGBZWWAgYW5kIGBZWVlZYCB0b2tlbnMgcmVwcmVzZW50IHdlZWstbnVtYmVyaW5nIHllYXJzIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIHllYXJzLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogOS4gYERgIGFuZCBgRERgIHRva2VucyByZXByZXNlbnQgZGF5cyBvZiB0aGUgeWVhciBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCBkYXlzIG9mIHRoZSBtb250aC5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgLSB0aGUgc3RyaW5nIG9mIHRva2Vuc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlPTFdIC0gdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpc1xuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyIHRva2VucyBgWVlgIGFuZCBgWVlZWWA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgZGF5IG9mIHllYXIgdG9rZW5zIGBEYCBhbmQgYEREYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgbG9jYWxpemVgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgZm9ybWF0TG9uZ2AgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLndlZWtTdGFydHNPbmAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDZcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDdcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMTEgRmVicnVhcnkgMjAxNCBpbiBtaWRkbGUtZW5kaWFuIGZvcm1hdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCAxLCAxMSksICdNTS9kZC95eXl5JylcbiAqIC8vPT4gJzAyLzExLzIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAyIEp1bHkgMjAxNCBpbiBFc3BlcmFudG86XG4gKiBpbXBvcnQgeyBlb0xvY2FsZSB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbydcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyKSwgXCJkbyAnZGUnIE1NTU0geXl5eVwiLCB7XG4gKiAgIGxvY2FsZTogZW9Mb2NhbGVcbiAqIH0pXG4gKiAvLz0+ICcyLWEgZGUganVsaW8gMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXNjYXBlIHN0cmluZyBieSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyczpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxNSksIFwiaCAnbycnY2xvY2snXCIpXG4gKiAvLz0+IFwiMyBvJ2Nsb2NrXCJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXQoZGlydHlEYXRlLCBkaXJ0eUZvcm1hdFN0ciwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX29wdGlvbnMkbG9jYWxlLCBfcmVmMiwgX3JlZjMsIF9yZWY0LCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZTIsIF9vcHRpb25zJGxvY2FsZTIkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLCBfcmVmNSwgX3JlZjYsIF9yZWY3LCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZTMsIF9vcHRpb25zJGxvY2FsZTMkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMywgX2RlZmF1bHRPcHRpb25zJGxvY2FsNDtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBmb3JtYXRTdHIgPSBTdHJpbmcoZGlydHlGb3JtYXRTdHIpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgbG9jYWxlID0gKF9yZWYgPSAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX29wdGlvbnMkbG9jYWxlICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRsb2NhbGUgOiBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBkZWZhdWx0TG9jYWxlO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmMiA9IChfcmVmMyA9IChfcmVmNCA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTIgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTIub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMiRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUyJG9wdGkuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmNCAhPT0gdm9pZCAwID8gX3JlZjQgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmNSA9IChfcmVmNiA9IChfcmVmNyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTMub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUzJG9wdGkud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNyAhPT0gdm9pZCAwID8gX3JlZjcgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY2ICE9PSB2b2lkIDAgPyBfcmVmNiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsNC53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY1ICE9PSB2b2lkIDAgPyBfcmVmNSA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5sb2NhbGl6ZSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGxvY2FsaXplIHByb3BlcnR5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUuZm9ybWF0TG9uZykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGZvcm1hdExvbmcgcHJvcGVydHknKTtcbiAgfVxuICB2YXIgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIGlmICghaXNWYWxpZChvcmlnaW5hbERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB9XG5cbiAgLy8gQ29udmVydCB0aGUgZGF0ZSBpbiBzeXN0ZW0gdGltZXpvbmUgdG8gdGhlIHNhbWUgZGF0ZSBpbiBVVEMrMDA6MDAgdGltZXpvbmUuXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gVVRDIGZ1bmN0aW9ucyB3aWxsIGJlIGltcGxlbWVudGVkLCBsb2NhbGVzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIHRoZW0uXG4gIC8vIFNlZSBhbiBpc3N1ZSBhYm91dCBVVEMgZnVuY3Rpb25zOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM3NlxuICB2YXIgdGltZXpvbmVPZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSk7XG4gIHZhciB1dGNEYXRlID0gc3ViTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSwgdGltZXpvbmVPZmZzZXQpO1xuICB2YXIgZm9ybWF0dGVyT3B0aW9ucyA9IHtcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSxcbiAgICB3ZWVrU3RhcnRzT246IHdlZWtTdGFydHNPbixcbiAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICBfb3JpZ2luYWxEYXRlOiBvcmlnaW5hbERhdGVcbiAgfTtcbiAgdmFyIHJlc3VsdCA9IGZvcm1hdFN0ci5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSAncCcgfHwgZmlyc3RDaGFyYWN0ZXIgPT09ICdQJykge1xuICAgICAgdmFyIGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJykubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICAvLyBSZXBsYWNlIHR3byBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyB3aXRoIG9uZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyXG4gICAgaWYgKHN1YnN0cmluZyA9PT0gXCInJ1wiKSB7XG4gICAgICByZXR1cm4gXCInXCI7XG4gICAgfVxuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwiJ1wiKSB7XG4gICAgICByZXR1cm4gY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZyk7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXR0ZXIodXRjRGF0ZSwgc3Vic3RyaW5nLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHApKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAnICsgZmlyc3RDaGFyYWN0ZXIgKyAnYCcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkge1xuICB2YXIgbWF0Y2hlZCA9IGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHApO1xuICBpZiAoIW1hdGNoZWQpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgXCInXCIpO1xufSIsICJleHBvcnQgY29uc3QgcG9pbnRzTm90ZU1hanVyaXR5ID0gMTAwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzTWFqdXJpdHkgPSAxMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlID0gNTAwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlID0gMjAwMDtcclxuZXhwb3J0IGNvbnN0IGF2YXRhckluaXRDb250ZW50ID0gIGAjIEF2YXRhclxyXG5cclxufCAgICAgICAgfCAgICAgfFxyXG58IC0tLS0tLSB8IC0tLSB8XHJcbnwgTGV2ZWwgIHwgMCAgICB8XHJcbnwgUG9pbnRzIHwgMCAgICB8XHJcbl5sZXZlbEFuZFBvaW50c1x0XHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFtFeHByaXJpZW5jZV1cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxyXG4gICAgZGF0YTogWzEwMDBdXHJcbnhNaW46IDBcclxueE1heDogMTAwMFxyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDQwJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG5pbmRleEF4aXM6IHlcclxueFRpdGxlOiBcInByb2dyZXNzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tIHxcclxufCAqKmJvb3N0ZXIgZmFjdG9yKiogfCAqKjAqKiB8XHJcbl5ib29zdGVyRmFjdG9yXHJcbnwgICAgICAgICAgICAgfCAgICAgfCAgICAgICB8XHJcbnwgLS0tLS0tLS0tLS0gfCAtLS0gfCAtLS0tLSB8XHJcbnwgKipkYWlseSBOb3RlcyoqIHwgKjUwMEVQKiB8ICoqMC8yKiogfFxyXG5eZGFpbHlOb3Rlc0NoYWxsZW5nZVxyXG58ICB8ICAgICB8fFxyXG58IC0tLS0gfCAtLS0gfCAtLS0gfFxyXG58ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKiowLzcqKiAgIHxcclxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFtOb3Rlc11cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IGRheXMgZG9uZSBpbiBhIHJvd1xyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xyXG4gICAgZGF0YTogWzddXHJcbnhNaW46IDBcclxueE1heDogN1xyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDQwJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG5pbmRleEF4aXM6IHlcclxueFRpdGxlOiBcImRheXNcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCBMZXZlbCB8IENvdW50IHxcclxufCA6LS0tOiB8IDotLS06IHxcclxufCBNYWp1cml0eSA1IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNSwgJzUnLCAnNVx1MjdBMVx1RkUwRicsICc1XHUyQjA3XHVGRTBGJywgJzVcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSA0IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNCwgJzQnLCAnNFx1MjdBMVx1RkUwRicsICc0XHUyQjA3XHVGRTBGJywgJzRcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAzIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMywgJzMnLCAnM1x1MjdBMVx1RkUwRicsICczXHUyQjA3XHVGRTBGJywgJzNcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAyIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMiwgJzInLCAnMlx1MjdBMVx1RkUwRicsICcyXHUyQjA3XHVGRTBGJywgJzJcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAxIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMSwgJzEnLCAnMVx1MjdBMVx1RkUwRicsICcxXHUyQjA3XHVGRTBGJywgJzFcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAwIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMCwgJzAnLCAnMFx1MjdBMVx1RkUwRicsICcwXHUyQjA3XHVGRTBGJywgJzBcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxuXHJcblxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbMCwgMCwgMF1cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IG1vZGlmaWVkXHJcbiAgICBkYXRhOiBbMCwgMCwgMF1cclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA4MCAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbnlUaXRsZTogXCJOdW1iZXIgb2YgTm90ZXNcIlxyXG54VGl0bGU6IFwiTW9udGhzXCJcclxueE1pbjogMFxyXG5cXGBcXGBcXGBcclxuXkNoYXJ0TW9udGhcclxuXHJcblxyXG4jIyMgQmFkZ2VzXHJcbiMjIyMgYWNoaWV2ZWRcclxuXHJcblxyXG4jIyMjIG91dHN0YW5kaW5nXHJcbmxldmVsIDU6ICpFbmxpZ2h0ZW5lZCBOb3ZpY2UqXHJcbmxldmVsIDEwOiAqQ3VyaW91cyBDb25ub2lzc2V1cipcclxubGV2ZWwgMjA6ICpCcmFpbmlhYyBUcmFpbGJsYXplcipcclxubGV2ZWwgMjc6ICpTY2hvbGFybHkgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDM1OiAqSW5mbyBOaW5qYSBNYXN0ZXIqXHJcbmxldmVsIDQyOiAqV2lzZSBPd2wgR3VydSpcclxubGV2ZWwgNTA6ICpFaW5zdGVpbiBJbmNhcm5hdGUqXHJcbmxldmVsIDYwOiAqTWFzdGVybWluZCBTYWdlKlxyXG5sZXZlbCA3NTogKkNlcmVicmFsIE1hZXN0cm8qXHJcbmxldmVsIDgyOiAqWmVuIEtub3dsZWRnZSBLZWVwZXIqXHJcbmxldmVsIDkwOiAqR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkKlxyXG5sZXZlbCAxMDA6ICpPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZypcclxuXHJcblxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDUqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNSBvciBub3RlLW1hdHVyaXR5ID0gXCI1XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNCoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA0IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gM1xyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMyBvciBub3RlLW1hdHVyaXR5ID0gXCIzXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDJcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAxXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAxIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMFxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMCBvciBub3RlLW1hdHVyaXR5ID0gXCIwXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcbmA7XHJcbiIsICJpbXBvcnQgeyBURmlsZSwgQXBwLCB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb24oY2hhckNvdW50VG90YWw6IG51bWJlciwgbGF5ZXIyY291bnQ6IG51bWJlciwgbGF5ZXIzY291bnQ6IG51bWJlcik6IG51bWJlciB7XHJcblx0Y29uc3QgcGVyY2VudExheWVyMiA9IGxheWVyMmNvdW50ICogMTAwIC8gY2hhckNvdW50VG90YWw7XHJcbiAgICBjb25zdCBwZXJjZW50TGF5ZXIzID0gbGF5ZXIzY291bnQgKiAxMDAgLyBsYXllcjJjb3VudDtcclxuXHR2YXIgbGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdHZhciBsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0dmFyIG1hanVyaXR5ID0gMDtcclxuXHRpZiAoY2hhckNvdW50VG90YWwgPCAzMDAwKSB7XHJcblx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBOb3RlIGlzIG5vdCBsb25nIGVub3VnaCB0byBnZXQgaW50byBjYWxjdWxhdGlvbiBmb3IgbWFqdXJpdHkuIFRoZSB0b3RhbCBjaGFyYWN0ZXIgY291bnQgaXMgJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0aWYgKHBlcmNlbnRMYXllcjIgPT0gMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMTApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDIwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAzMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGF5ZXIzY291bnQgPT0gMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMTApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDIwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGF5ZXIybWFqdXJpdHkgPT0gMSAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMTtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gMiAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPj0gMyAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAoKGxheWVyMm1hanVyaXR5ID09IDMgfHwgbGF5ZXIybWFqdXJpdHkgPT0gNCkgJiYgKGxheWVyM21hanVyaXR5ID09IDQgfHwgbGF5ZXIzbWFqdXJpdHkgPT0gNSkpIHtcclxuXHRcdFx0bWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSA1ICYmIGxheWVyM21hanVyaXR5ID09IDUpIHtcclxuXHRcdFx0bWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0XHJcblx0Ly9jb25zb2xlLmxvZyhgbGF5ZXIybWFqdXJpdHk6ICR7bGF5ZXIybWFqdXJpdHl9IFxcdGxheWVyM21hanVyaXR5OiAke2xheWVyM21hanVyaXR5fSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBwZXJjZW50TGF5ZXIyOiAke3BlcmNlbnRMYXllcjJ9IFxcdHBlcmNlbnRMYXllcjM6ICR7cGVyY2VudExheWVyM30gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgY2hhckNvdW50VG90YWw6ICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0cmV0dXJuIG1hanVyaXR5O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZyk6IHsgY2hhckNvdW50OiBudW1iZXI7IGhpZ2hsaWdodGVkQ291bnQ6IG51bWJlcjsgYm9sZENvdW50OiBudW1iZXIgfSB7XHJcbiAgXHJcblx0Y29uc3QgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uID0gZmlsZW5hbWU7IC8vLnNsaWNlKDAsIC1maWxlbmFtZS5sZW5ndGgpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gZm9ybWF0dGluZyBzeW1ib2xzXHJcblx0Y29uc3Qgc3RyaXBwZWRDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9bKl9+YF0vZywgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBoZWFkaW5ncyB0aGF0IG1hdGNoIHRoZSBmaWxlbmFtZVxyXG5cdGNvbnN0IGhlYWRpbmdSZWdleCA9IC9eKCMrKVxccyguKikkL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MgPSBzdHJpcHBlZENvbnRlbnQucmVwbGFjZShoZWFkaW5nUmVnZXgsIChtYXRjaCwgcDEsIHAyKSA9PiB7XHJcblx0XHJcblx0XHQvLyBjb25zb2xlLmxvZyhgcDI6ICR7cDJ9YCk7XHJcblx0XHRpZiAocDIgPT09IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtYXRjaDtcclxuXHR9KTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRIZWFkaW5nczogJHtjb250ZW50V2l0aG91dEhlYWRpbmdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWV0YWRhdGEgYmxvY2tzIGZyb20gY291bnRcclxuXHRjb25zdCBtZXRhZGF0YVJlZ2V4ID0gL14tLS1bXFxzXFxTXSo/LS0tL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEgPSBjb250ZW50V2l0aG91dEhlYWRpbmdzLnJlcGxhY2UobWV0YWRhdGFSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TWV0YWRhdGE6ICR7Y29udGVudFdpdGhvdXRNZXRhZGF0YX1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlICN0YWdzIGZyb20gY291bnRcclxuXHRjb25zdCB0YWdSZWdleCA9IC8jW15cXHNdKy9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0VGFncyA9IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEucmVwbGFjZSh0YWdSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0VGFnczogJHtjb250ZW50V2l0aG91dFRhZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBsaW5rcyBhbmQgV2lraXBlZGlhLWxpbmtzIGZyb20gY291bnRcclxuXHRjb25zdCBsaW5rUmVnZXggPSAvXFxbLio/XFxdXFwoLio/XFwpfFxcW1xcWy4qP1xcXVxcXS9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TGlua3MgPSBjb250ZW50V2l0aG91dFRhZ3MucmVwbGFjZShsaW5rUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dExpbmtzOiAke2NvbnRlbnRXaXRob3V0TGlua3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBibGFuayBuZXdsaW5lc1xyXG5cdGNvbnN0IGZpbHRlcmVkQ29udGVudDogc3RyaW5nID0gY29udGVudFdpdGhvdXRMaW5rc1xyXG5cdC5zcGxpdCgnXFxuJykgLy8gU3BsaXQgdGhlIGNvbnRlbnQgaW50byBhbiBhcnJheSBvZiBsaW5lc1xyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpIC8vIEZpbHRlciBvdXQgbGluZXMgdGhhdCBhcmUgZW1wdHkgb3IgY29udGFpbiBvbmx5IHdoaXRlc3BhY2VcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICctLS0nKSAvLyByZW1vdmUgLS0tIG9uIHNpbmdsZSBsaW5lc1xyXG5cdC5qb2luKCdcXG4nKTsgLy8gSm9pbiB0aGUgcmVtYWluaW5nIGxpbmVzIGJhY2sgaW50byBhIHN0cmluZywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzXHJcblx0Ly8gY29uc29sZS5sb2coYGZpbHRlcmVkQ29udGVudDogJHtmaWx0ZXJlZENvbnRlbnR9YCk7XHJcblxyXG5cdC8vIENvdW50IHRoZSByZW1haW5pbmcgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGNoYXJDb3VudCA9IGZpbHRlcmVkQ29udGVudC5sZW5ndGg7XHJcblx0Ly8gY29uc29sZS5sb2coYGNoYXJDb3VudDogJHtjaGFyQ291bnR9YCk7XHJcblxyXG5cclxuXHQvLyBjYWxjdWxhdGUgTGF5ZXIgMiAmIDMgTGVuZ3RoXHJcblxyXG5cdC8vIENvdW50IHRoZSBoaWdobGlnaHRlZCBhbmQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0bGV0IGhpZ2hsaWdodGVkQ291bnQgPSAwO1xyXG5cdGxldCBib2xkQ291bnQgPSAwO1xyXG4gIFxyXG5cdHZhciBsYXllcjJleGNsdWRlID0gJz0nXHJcblx0dmFyIGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0Ly8gdG8gaGF2ZSB0aGUgcmVnIGV4IGNvcnJlY3QuIG90aGVyd2lzZSBpdCB3aWxsIGdldCBzdHVjIHdpdGggKiouXHJcblx0aWYobGF5ZXIzID09ICcqKicpe1xyXG5cdFx0bGF5ZXIzID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdH1cclxuXHRpZihsYXllcjIgPT0gJyoqJyl7XHJcblx0XHRsYXllcjIgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnPSdcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnXFxcXConXHJcblx0fVxyXG4gIFx0XHJcblxyXG5cdGNvbnN0IGhpZ2hsaWdodFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjJ9W14ke2xheWVyMmV4Y2x1ZGV9XSske2xheWVyMn1gLCBcImdcIik7XHJcbiAgICBjb25zdCBib2xkUmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyM31bXiR7bGF5ZXIzZXhjbHVkZX1dKyR7bGF5ZXIzfWAsIFwiZ1wiKTtcclxuICBcclxuXHQvLyBDb3VudCBoaWdobGlnaHRlZCBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgaGlnaGxpZ2h0ZWRNYXRjaGVzID0gY29udGVudC5tYXRjaChoaWdobGlnaHRSZWdleCk7XHJcblx0aWYgKGhpZ2hsaWdodGVkTWF0Y2hlcykge1xyXG5cdCAgaGlnaGxpZ2h0ZWRDb3VudCA9IGhpZ2hsaWdodGVkTWF0Y2hlcy5qb2luKFwiXCIpLmxlbmd0aCAtIChoaWdobGlnaHRlZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJz09J1xyXG5cdCAgLy8gZmlyc3QgdGFrZSB0aGUgbGF5ZXIyIChoaWdobGlnaHRlZENvdW50KSBhbmQgcnVuIG9uIHRoaXMgdGhlICdib2xkUmVnZXgnXHJcblx0ICAvLyBDb3VudCBib2xkIGNoYXJhY3RlcnNcclxuXHQgIGNvbnN0IGxheWVyMlN0cmluZyA9IGhpZ2hsaWdodGVkTWF0Y2hlcy5qb2luKFwiXCIpO1xyXG5cdCAgY29uc3QgYm9sZE1hdGNoZXMgPSBsYXllcjJTdHJpbmcubWF0Y2goYm9sZFJlZ2V4KTtcclxuXHQgIGlmIChib2xkTWF0Y2hlcykge1xyXG5cdCAgICBib2xkQ291bnQgPSBib2xkTWF0Y2hlcy5qb2luKFwiXCIpLmxlbmd0aCAtIChib2xkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnKionXHJcblx0ICB9XHJcblx0fVxyXG4gIFxyXG5cdFxyXG5cdFxyXG4gIFxyXG5cdHJldHVybiB7IGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50IH07XHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZXZlbE9mTWF0dXJpdHkobm90ZUxlbmd0aDogbnVtYmVyLCBsZW5ndGhPZlRpdGxlOiBudW1iZXIsIElubGlua3M6IG51bWJlciwgb3V0Z29pbmdMaW5rczogbnVtYmVyLCBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBub3RlTGVuZ3RoOiAke25vdGVMZW5ndGh9XFx0bGVuZ3RoT2ZUaXRsZTogJHtsZW5ndGhPZlRpdGxlfVxcdElubGlua3M6ICR7SW5saW5rc31cXHRvdXRnb2luZ0xpbmtzOiAke291dGdvaW5nTGlua3N9YClcclxuXHRcclxuXHQvLyBkZWNpZGUgaWYgbm90ZUxlbmd0aC1tYWp1cml0eSBvciBwcm9ncmVzc2l2ZVN1bS1tYWp1cml0eSBzaGFsbCBiZSB1c2VkXHJcblx0dmFyIGxlbmd0aE1hanVyaXR5ID0gMDtcclxuXHRpZihub3RlTGVuZ3RoID49IHByb2dyZXNzaXZlU3VtTWFqdXJpdHkpIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gbm90ZUxlbmd0aDtcclxuXHR9IGVsc2Uge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5O1xyXG5cdH1cclxuXHRcclxuXHRjb25zdCB0b3RhbFdlaWdodCA6IG51bWJlciA9IGxlbmd0aE1hanVyaXR5ICsgbGVuZ3RoT2ZUaXRsZSArIElubGlua3MgKyBvdXRnb2luZ0xpbmtzO1xyXG5cdGNvbnN0IGF2ZXJhZ2VXZWlnaHQgPSB0b3RhbFdlaWdodCAvIDU7XHJcblx0Ly8gY29uc29sZS5sb2coYHRvdGFsV2VpZ2h0OiAke3RvdGFsV2VpZ2h0fVxcdGF2ZXJhZ2VXZWlnaHQ6ICR7YXZlcmFnZVdlaWdodH1gKVxyXG5cdGlmIChhdmVyYWdlV2VpZ2h0IDwgMC41KSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMSkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDIpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMy41KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gNCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlT3V0bGlua3Mob3V0bGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG91dGxpbmtzOiAke291dGxpbmtzfWApXHJcblx0aWYgKG91dGxpbmtzIDwgMikge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDMpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA1KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgOSkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTIpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUlubGlua3MobnVtSW5saW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvL3ZhciBwcm96ZW50SW5saW5rcyA9IG51bUlubGlua3MgKiAxMDAgLyBudW1BbGxGaWxlcztcclxuXHQvL2NvbnNvbGUubG9nKGBudW1JbmxpbmtzOiAke251bUlubGlua3N9XFx0bnVtQWxsRmlsZXM6ICR7bnVtQWxsRmlsZXN9XFx0cHJvemVudElubGlua3M6ICR7cHJvemVudElubGlua3N9YClcclxuXHQvKmlmIChwcm96ZW50SW5saW5rcyA8IDAuMDA1IHx8IHByb3plbnRJbmxpbmtzID4gMC4xKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgKi8gaWYgKG51bUlubGlua3MgPT0gMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgNCkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgOCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDE2KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPj0gMTYgJiYgbnVtSW5saW5rcyA8IDUwMCApIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZURpcmVjdGlvbihyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRsZXQgcmF0aW5nID0gXCJcIlxyXG5cdGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPiByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDdcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA2XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA9PSByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTI3QTFcdUZFMEZcIlxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlwiXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIGlmIChmaWxlbmFtZS5sZW5ndGggPCAzMCkge1xyXG5cdHJldHVybiAwO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgODApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDEwMCkge1xyXG5cdHJldHVybiAzO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTUwKSB7XHJcblx0cmV0dXJuIDU7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxOTApIHtcclxuXHRyZXR1cm4gNDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDIxMCkge1xyXG5cdHJldHVybiAyO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjUwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIHtcclxuXHRyZXR1cm4gMDtcclxuICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU5vdGVMZW5ndGgoY29udGVubGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGlmIChjb250ZW5sZW5ndGggPCAyMDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgNTUwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEwMDApIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTIwMCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyMDAwKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDI1MDApIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMzAwMCkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1iZXJPZk91dGxpbmtzKGFjdGl2ZUZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuXHQvLyBjb25zdCBhY3RpdmVGaWxlOiBURmlsZSB8IG51bGwgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRpZiAoIWFjdGl2ZUZpbGUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHRjb25zdCBpbmxpbmtzID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGFjdGl2ZUZpbGUpPy5saW5rcztcclxuXHRyZXR1cm4gaW5saW5rcyA/IE9iamVjdC5rZXlzKGlubGlua3MpLmxlbmd0aCA6IDA7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgXHJcblx0Y29uc3QgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uID0gZmlsZW5hbWU7IC8vLnNsaWNlKDAsIC1maWxlbmFtZS5sZW5ndGgpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gZm9ybWF0dGluZyBzeW1ib2xzXHJcblx0Y29uc3Qgc3RyaXBwZWRDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9bKl9+YF0vZywgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBoZWFkaW5ncyB0aGF0IG1hdGNoIHRoZSBmaWxlbmFtZVxyXG5cdGNvbnN0IGhlYWRpbmdSZWdleCA9IC9eKCMrKVxccyguKikkL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MgPSBzdHJpcHBlZENvbnRlbnQucmVwbGFjZShoZWFkaW5nUmVnZXgsIChtYXRjaCwgcDEsIHAyKSA9PiB7XHJcblx0XHJcblx0XHQvLyBjb25zb2xlLmxvZyhgcDI6ICR7cDJ9YCk7XHJcblx0XHRpZiAocDIgPT09IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtYXRjaDtcclxuXHR9KTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRIZWFkaW5nczogJHtjb250ZW50V2l0aG91dEhlYWRpbmdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWV0YWRhdGEgYmxvY2tzIGZyb20gY291bnRcclxuXHRjb25zdCBtZXRhZGF0YVJlZ2V4ID0gL14tLS1bXFxzXFxTXSo/LS0tL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEgPSBjb250ZW50V2l0aG91dEhlYWRpbmdzLnJlcGxhY2UobWV0YWRhdGFSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TWV0YWRhdGE6ICR7Y29udGVudFdpdGhvdXRNZXRhZGF0YX1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlICN0YWdzIGZyb20gY291bnRcclxuXHRjb25zdCB0YWdSZWdleCA9IC8jW15cXHNdKy9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0VGFncyA9IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEucmVwbGFjZSh0YWdSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0VGFnczogJHtjb250ZW50V2l0aG91dFRhZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBsaW5rcyBhbmQgV2lraXBlZGlhLWxpbmtzIGZyb20gY291bnRcclxuXHRjb25zdCBsaW5rUmVnZXggPSAvXFxbLio/XFxdXFwoLio/XFwpfFxcW1xcWy4qP1xcXVxcXS9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TGlua3MgPSBjb250ZW50V2l0aG91dFRhZ3MucmVwbGFjZShsaW5rUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dExpbmtzOiAke2NvbnRlbnRXaXRob3V0TGlua3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBibGFuayBuZXdsaW5lc1xyXG5cdGNvbnN0IGZpbHRlcmVkQ29udGVudDogc3RyaW5nID0gY29udGVudFdpdGhvdXRMaW5rc1xyXG5cdC5zcGxpdCgnXFxuJykgLy8gU3BsaXQgdGhlIGNvbnRlbnQgaW50byBhbiBhcnJheSBvZiBsaW5lc1xyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpIC8vIEZpbHRlciBvdXQgbGluZXMgdGhhdCBhcmUgZW1wdHkgb3IgY29udGFpbiBvbmx5IHdoaXRlc3BhY2VcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICctLS0nKSAvLyByZW1vdmUgLS0tIG9uIHNpbmdsZSBsaW5lc1xyXG5cdC5qb2luKCdcXG4nKTsgLy8gSm9pbiB0aGUgcmVtYWluaW5nIGxpbmVzIGJhY2sgaW50byBhIHN0cmluZywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzXHJcblx0Ly8gY29uc29sZS5sb2coYGZpbHRlcmVkQ29udGVudDogJHtmaWx0ZXJlZENvbnRlbnR9YCk7XHJcblxyXG5cdC8vIENvdW50IHRoZSByZW1haW5pbmcgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGNoYXJDb3VudCA9IGZpbHRlcmVkQ29udGVudC5sZW5ndGg7XHJcblx0Ly8gY29uc29sZS5sb2coYGNoYXJDb3VudDogJHtjaGFyQ291bnR9YCk7XHJcblxyXG5cdHJldHVybiBjaGFyQ291bnQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rc19zaW5nbGUoZmlsZV9wYXRoOiBzdHJpbmcsIHZhdWx0X3BhdGg6IHN0cmluZyk6IG51bWJlciB7XHJcblx0Ly8gR2V0IHRoZSBmaWxlbmFtZSBhbmQgZGlyZWN0b3J5IG9mIHRoZSBmaWxlIHdlJ3JlIGNvdW50aW5nIGxpbmtzIHRvXHJcblx0Y29uc3QgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVfcGF0aCk7XHJcblx0Y29uc3QgZGlyZWN0b3J5ID0gcGF0aC5kaXJuYW1lKGZpbGVfcGF0aCk7XHJcblxyXG5cdC8vIENyZWF0ZSBhIHNldCB0byBob2xkIGFsbCB0aGUgZmlsZXMgdGhhdCBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdGNvbnN0IGxpbmtpbmdfZmlsZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xyXG5cclxuXHQvLyBSZWN1cnNpdmVseSBzZWFyY2ggZm9yIGZpbGVzIGluIHRoZSB2YXVsdCBkaXJlY3RvcnkgdGhhdCBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdGNvbnN0IHdhbGtTeW5jID0gKGRpcjogc3RyaW5nLCBmaWxlbGlzdDogc3RyaW5nW10pID0+IHtcclxuXHRcdGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoZGlyKTtcclxuXHRcdGZpbGVsaXN0ID0gZmlsZWxpc3QgfHwgW107XHJcblx0XHRmaWxlcy5mb3JFYWNoKChmaWxlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0aWYgKGZzLnN0YXRTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpKS5pc0RpcmVjdG9yeSgpKSB7XHJcblx0XHRcdFx0ZmlsZWxpc3QgPSB3YWxrU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgZmlsZWxpc3QpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdC8vIElnbm9yZSBub24tbWQgZmlsZXMgYW5kIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRpZiAoIWZpbGUuZW5kc1dpdGgoXCIubWRcIikgfHwgZmlsZSA9PT0gZmlsZW5hbWUpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFJlYWQgdGhlIGZpbGUgYW5kIGxvb2sgZm9yIGxpbmtzIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIFwidXRmLThcIik7XHJcblx0XHRcdFx0ZGF0YS5zcGxpdCgnXFxuJykuZm9yRWFjaCgobGluZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAobGluZS5pbmNsdWRlcyhgW1ske2ZpbGVuYW1lLnNsaWNlKDAsIC0zKX1dXWApIHx8IGxpbmUuaW5jbHVkZXMoYFske2ZpbGVuYW1lLnNsaWNlKDAsIC0zKX1dYCkpIHtcclxuXHRcdFx0XHRcdFx0Ly8gV2UgZm91bmQgYSBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZSFcclxuXHRcdFx0XHRcdFx0bGlua2luZ19maWxlcy5hZGQocGF0aC5yZWxhdGl2ZShkaXJlY3RvcnksIHBhdGguam9pbihkaXIsIGZpbGUpKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIGZpbGVsaXN0O1xyXG5cdH07XHJcblxyXG5cdHdhbGtTeW5jKHZhdWx0X3BhdGgsIFtdKTtcclxuXHJcblx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgYXJlIG1lbnRpb25pbmcgdGhlIGlucHV0IGZpbGVcclxuXHRyZXR1cm4gbGlua2luZ19maWxlcy5zaXplO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3MoZmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG4gICAgY29uc3QgeyBhcHA6IHsgbWV0YWRhdGFDYWNoZTogeyByZXNvbHZlZExpbmtzIH0gfSB9ID0gdGhpcztcclxuICAgIGNvbnN0IHsgcGF0aCB9ID0gZmlsZTtcclxuXHJcbiAgICBjb25zdCBzdW1JbmxpbmtzID0gT2JqZWN0LnZhbHVlcyhyZXNvbHZlZExpbmtzKVxyXG4gICAgICAgIC5tYXAoKHZhbDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSkgPT4gdmFsW3BhdGhdID8/IDApXHJcbiAgICAgICAgLnJlZHVjZSgobGVmdCwgcmlnaHQpID0+IGxlZnQgKyByaWdodCwgMCk7XHJcblxyXG4gICAgcmV0dXJuIHN1bUlubGlua3M7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZUNvdW50TWFwID0gYXN5bmMgKGFwcDogQXBwLCBleGNsdWRlVGFnOiBzdHJpbmcsIGV4Y2x1ZGVGb2xkZXI6IHN0cmluZyk6IFByb21pc2U8TWFwPHN0cmluZywgbnVtYmVyPj4gPT4ge1xyXG5cclxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHJcblx0XHJcblx0Ly8gZmlsZXMgd2l0aCB0aGlzICN0YWdzIGluIHRvIGlnbm9yZVxyXG5cdGxldCBleGNsdWRlZFN1YnN0cmluZ3MgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVUYWcgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBleGNsdWRlVGFnLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRcclxuXHJcblx0Ly8gZm9sZGVycyB0byBpZ25vcmUgLm1kLWZpbGVzIGluXHJcblx0bGV0IGV4Y2x1ZGVkRm9sZGVycyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZUZvbGRlciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IGV4Y2x1ZGVGb2xkZXIuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdGV4Y2x1ZGVkRm9sZGVycy5wdXNoKCcub2JzaWRpYW4nLCAnLnRyYXNoJyk7IC8vIGhhcmRjb2RlIHRoZSBiYXNpYyBmb2xkZXJzXHJcblx0XHJcbiAgICBjb25zdCBmaWxlQ291bnRNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cclxuXHRcdGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTtcclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcblxyXG5cdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblxyXG4gICAgICAgIGlmICghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuICAgICAgICB9XHJcblx0XHRcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsZUNvdW50TWFwO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlTWFwID0gYXN5bmMgKGFwcDogQXBwLCBleGNsdWRlVGFnOiBzdHJpbmcsIGV4Y2x1ZGVGb2xkZXI6IHN0cmluZyk6IFByb21pc2U8VEZpbGVbXT4gPT4ge1xyXG5cclxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHJcblx0Ly8gZmlsZXMgd2l0aCB0aGlzICN0YWdzIGluIHRvIGlnbm9yZVxyXG5cdGxldCBleGNsdWRlZFN1YnN0cmluZ3MgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVUYWcgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBleGNsdWRlVGFnLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZFN1YnN0cmluZ3M6ICR7ZXhjbHVkZWRTdWJzdHJpbmdzfWApXHJcblx0Ly8gZm9sZGVycyB0byBpZ25vcmUgLm1kLWZpbGVzIGluXHJcblx0bGV0IGV4Y2x1ZGVkRm9sZGVycyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZUZvbGRlciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IGV4Y2x1ZGVGb2xkZXIuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdGV4Y2x1ZGVkRm9sZGVycy5wdXNoKCcub2JzaWRpYW4nLCAnLnRyYXNoJyk7IC8vIGhhcmRjb2RlIHRoZSBiYXNpYyBmb2xkZXJzXHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRGb2xkZXJzOiAke2V4Y2x1ZGVkRm9sZGVyc31gKVx0XHJcbiAgICBsZXQgZmlsZUFycmF5OiBURmlsZVtdID0gW107XHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cclxuICAgICAgICBjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdC8vY29uc29sZS5sb2coYGZpbGUucGF0aDogJHtmaWxlLnBhdGh9YClcclxuXHRcdGlmICgoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgfHwgZXhjbHVkZVRhZy5sZW5ndGggPT09IDApICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBmaWxlICR7ZmlsZX0gZ2V0J3MgYWRkZWQuYClcclxuXHRcdFx0ZmlsZUFycmF5LnB1c2goZmlsZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlsZUFycmF5O1xyXG59O1xyXG4iLCAiaW1wb3J0IHtURmlsZX0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdENyZWF0ZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdENyZWF0ZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5jdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcbiAgXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RNb2RpZmllZEZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0TW9kaWZpZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0TW9kaWZpZWRGaWxlLnN0YXQubXRpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RNb2RpZmllZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RNb2RpZmllZEZpbGU7XHJcbn0gIFxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3REYXRlRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0XHRpZiAoZmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RDcmVhdGVkRmlsZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtb250aHNCZXR3ZWVuKHN0YXJ0TW9udGg6IERhdGUsIGVuZE1vbnRoOiBEYXRlKTogbnVtYmVyIHtcclxuXHRsZXQgbW9udGhzID0gKGVuZE1vbnRoLmdldE1vbnRoKCkgLSBzdGFydE1vbnRoLmdldE1vbnRoKCkpICsgMTtcclxuXHRpZiAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSA+IHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkge1xyXG5cdFx0bW9udGhzICs9IChlbmRNb250aC5nZXRGdWxsWWVhcigpIC0gc3RhcnRNb250aC5nZXRGdWxsWWVhcigpKSoxMjtcclxuXHR9XHJcblx0cmV0dXJuIG1vbnRocztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvbkRhdGVzKGZpbGVzOiBURmlsZVtdKTogQXJyYXk8RGF0ZT4ge1xyXG5cdGNvbnN0IGNyZWF0aW9uRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XHJcbiAgXHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRjcmVhdGlvbkRhdGVzLnB1c2gobmV3IERhdGUoZmlsZS5zdGF0LmN0aW1lKSk7XHJcblx0fVxyXG4gIFxyXG5cdHJldHVybiBjcmVhdGlvbkRhdGVzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGlmaWNhdGlvbkRhdGVzKGZpbGVzOiBURmlsZVtdKTogQXJyYXk8RGF0ZT4ge1xyXG5cdGNvbnN0IGNyZWF0aW9uRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XHJcbiAgXHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRjcmVhdGlvbkRhdGVzLnB1c2gobmV3IERhdGUoZmlsZS5zdGF0Lm10aW1lKSk7XHJcblx0fVxyXG4gIFxyXG5cdHJldHVybiBjcmVhdGlvbkRhdGVzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0Rm9ybWF0KHlfYXhpczogc3RyaW5nLCBjb3VudHNTdHJpbmdNb2Q6IHN0cmluZywgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRsZXQgbW9uYXRzYmVncmVuenVuZyA9IG51bGxcclxuXHRpZiAoY2hhcnRSZWR1emllcnVuZ01vbmF0ZSA9PSAwKXtcclxuXHRcdG1vbmF0c2JlZ3Jlbnp1bmcgPSAwXHJcblx0fSBlbHNlIHtcclxuXHRcdG1vbmF0c2JlZ3Jlbnp1bmcgPSBjb3VudHNTdHJpbmdNb2Quc3BsaXQoJywnKS5sZW5ndGggLSBjaGFydFJlZHV6aWVydW5nTW9uYXRlXHJcblx0fVxyXG5cdFxyXG5cdC8vY29uc3QgbW9uYXRzYmVncmVuenVuZyA9IGxlbmd0aGNvdW50c1N0cmluZ0NyZWF0ZSAtIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdHJldHVybiBcImBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbXCIgKyB5X2F4aXMgKyBcIl1cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBtb2RpZmllZFxcbiAgICBkYXRhOiBbXCIgKyBjb3VudHNTdHJpbmdNb2QgKyBcIl1cXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogODAgJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxueVRpdGxlOiBcXFwiTnVtYmVyIG9mIE5vdGVzXFxcIlxcbnhUaXRsZTogXFxcIk1vbnRoc1xcXCJcXG54TWluOiBcIiArIG1vbmF0c2JlZ3Jlbnp1bmcgKyBcIlxcbmBgYFwiO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUNoYXJ0Q29udGVudCAoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgbmV3Q29udGVudDogc3RyaW5nKSB7XHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0aWYgKGxpbmUgPT09IFwiXkNoYXJ0TW9udGhcIikge1xyXG5cdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRpZiAocmVmZXJlbmNlICE9IG51bGwpe1xyXG5cdFx0ZW5kID0gcmVmZXJlbmNlO1xyXG5cdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAxOTtcclxuXHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3Q29udGVudCwgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgICBsZXZlbDogc3RyaW5nO1xyXG4gIH1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lmUmVjZWl2ZUFCYWRnZShsZXZlbE9sZDogbnVtYmVyLCBsZXZlbE5ldzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gIGxldCByZWNlaXZlQmFkZ2UgPSBmYWxzZVxyXG4gIGZvciAobGV0IGk9MDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKXtcclxuICAgIGlmIChsZXZlbE9sZCA8IGJhZGdlTGV2ZWxzW2ldICYmIGxldmVsTmV3ID49IGJhZGdlTGV2ZWxzW2ldKXtcclxuICAgICAgcmVjZWl2ZUJhZGdlID0gdHJ1ZVxyXG4gICAgfSBcclxuICB9XHJcbiAgcmV0dXJuIHJlY2VpdmVCYWRnZVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyLCBpbmZvcm06IGJvb2xlYW4pOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiwgbGV2ZWw6IFwibGV2ZWwgNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiAsIGxldmVsOiBcImxldmVsIDEwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiAsIGxldmVsOiBcImxldmVsIDI3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2UgT3dsIEd1cnVcIiwgZGVzY3JpcHRpb246IFwiV2hvby1ob28hIFlvdSd2ZSBhY2hpZXZlZCAnV2lzZSBPd2wgR3VydScgc3RhdHVzLiBZb3VyIHdpc2RvbSBpcyBsZWdlbmRhcnksIGFuZCB5b3VyIGhvb3RzIG9mIGtub3dsZWRnZSBlY2hvIHRocm91Z2ggdGhlIGZvcmVzdCBvZiBpZ25vcmFuY2UhXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFaW5zdGVpbiBJbmNhcm5hdGVcIiwgZGVzY3JpcHRpb246IFwiRXVyZWthISBZb3UndmUgYmVjb21lIGFuICdFaW5zdGVpbiBJbmNhcm5hdGUsJyBwdXNoaW5nIHRoZSBib3VuZGFyaWVzIG9mIHVuZGVyc3RhbmRpbmcgYW5kIGJlbmRpbmcgdGhlIGZhYnJpYyBvZiBrbm93bGVkZ2UgdG8geW91ciB3aWxsIVwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTWFzdGVybWluZCBTYWdlXCIsIGRlc2NyaXB0aW9uOiBcIk1hZ25pZmljZW50ISBZb3UndmUgYXNjZW5kZWQgdG8gdGhlIHJhbmsgb2YgJ01hc3Rlcm1pbmQgU2FnZSwnIGd1aWRpbmcgdGhlIHJpdmVycyBvZiBpbmZvcm1hdGlvbiBhbmQgZW5saWdodGVuaW5nIGFsbCB3aG8gc2VlayB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDZXJlYnJhbCBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZpc3NpbW8hIFlvdSdyZSBub3cgYSAnQ2VyZWJyYWwgTWFlc3RybywnIGNvbmR1Y3RpbmcgdGhlIHN5bXBob255IG9mIGtub3dsZWRnZSB3aXRoIHRoZSBmaW5lc3NlIG9mIGEgdmlydHVvc28gY29uZHVjdG9yIVwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiWmVuIEtub3dsZWRnZSBLZWVwZXJcIiwgZGVzY3JpcHRpb246IFwiU2VyZW5pdHkgYWNoaWV2ZWQhIEFzIGEgJ1plbiBLbm93bGVkZ2UgS2VlcGVyLCcgeW91IG1haW50YWluIGEgdHJhbnF1aWwgbWluZCB3aGlsZSBtYW5hZ2luZyB2YXN0IHBvb2xzIG9mIGtub3dsZWRnZSB3aXRoIGdyYWNlIGFuZCBwb2lzZS5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZFwiLCBkZXNjcmlwdGlvbjogXCJBbGwgaGFpbCB0aGUgJ0dyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCEnIFlvdSB3aWVsZCB0aGUga25vd2xlZGdlIG9mIGFnZXMgYW5kIGhvbGQgdGhlIGtleXMgdG8gdW5sb2NrIHRoZSBnYXRlcyBvZiB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZ1wiLCBkZXNjcmlwdGlvbjogXCJDb25ncmF0dWxhdGlvbnMsIG9oIHdpc2Ugb25lISBZb3UndmUgYXR0YWluZWQgdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgZW5saWdodGVubWVudCBhcyB0aGUgJ09tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nLicgWW91ciB1bmRlcnN0YW5kaW5nIGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgd2lzZG9tIGlzIGFzIHZhc3QgYXMgdGhlIGNvc21vcyBpdHNlbGYhXCIsIGxldmVsOiBcImxldmVsIDEwMFwiICB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNbaW5kZXhdXHJcbiAgfVxyXG4gIFxyXG5cclxuXHJcbiAgZXhwb3J0ICBmdW5jdGlvbiBnZXRCYWRnZUZvckluaXRMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzAsIDMsIDcsIDE1LCAyMywgMzAsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lc0luaXQ6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIFNlZWtlciBJbml0aWF0ZVwiLCBkZXNjcmlwdGlvbjogXCJXZWxjb21lIHRvIHRoZSBqb3VybmV5IG9mIGtub3dsZWRnZSEgQXMgYSAnTG9yZSBTZWVrZXIgSW5pdGlhdGUsJyB5b3UndmUgdGFrZW4geW91ciBmaXJzdCBzdGVwcyBpbnRvIHRoZSB3b3JsZCBvZiBvcmdhbml6ZWQgd2lzZG9tLiBZb3VyIHF1ZXN0IGhhcyBqdXN0IGJlZ3VuLCBhbmQgd2l0aCBlYWNoIG5vdGUgeW91IG1ha2UsIHlvdSBsYXkgdGhlIGZvdW5kYXRpb24gZm9yIGEgZnV0dXJlIHJpY2ggd2l0aCBpbnNpZ2h0cyBhbmQgdW5kZXJzdGFuZGluZy4gWW91ciBqb3VybmV5IHN0YXJ0cyBoZXJlLCBhbmQgdGhlIHBhdGggYWhlYWQgaXMgZmlsbGVkIHdpdGggcG90ZW50aWFsIGFuZCBkaXNjb3ZlcnkuXCIsIGxldmVsOiBcImxldmVsIDFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBBcHByZW50aWNlXCIsIGRlc2NyaXB0aW9uOiBcIllvdSd2ZSBoaXQgdGhlIGdyb3VuZCBydW5uaW5nIHdpdGggeW91ciBleGlzdGluZyBrbm93bGVkZ2UgdHJlYXN1cmVzISBZb3UncmUgYWxyZWFkeSBhbiAnTG9yZSBBcHByZW50aWNlLCcgYXJtZWQgd2l0aCBhIHdlYWx0aCBvZiB3aXNkb20gYW5kIHJlYWR5IHRvIHNoYXBlIGl0IGZ1cnRoZXIuXCIsIGxldmVsOiBcImxldmVsIDNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2F2dnkgU2Nob2xhclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgZ2l2ZW4geW91IGEgaGVhZCBzdGFydCEgWW91J3JlIG5vdyBhICdTYXZ2eSBTY2hvbGFyLCcgY29uZmlkZW50bHkgZGl2aW5nIGludG8gdGhlIHNlYSBvZiBpbmZvcm1hdGlvbiB3aXRoIGEgdHJlYXN1cmUgdHJvdmUgb2YgaW5zaWdodHMuXCIgLCBsZXZlbDogXCJsZXZlbCA3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhZ2UncyBGb3VuZGF0aW9uXCIsIGRlc2NyaXB0aW9uOiBcIkJ1aWxkaW5nIHVwb24geW91ciBwcmUtZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSBlc3RhYmxpc2hpbmcgdGhlICdTYWdlJ3MgRm91bmRhdGlvbicgZm9yIGFuIGV2ZW4gZ3JhbmRlciBlZGlmaWNlIG9mIGtub3dsZWRnZS4gWW91ciBncm91bmR3b3JrIGlzIGltcHJlc3NpdmUhXCIgLCBsZXZlbDogXCJsZXZlbCAxNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNkb20gU2VlZGxpbmdcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG51cnR1cmVkIHRoZSBncm93dGggb2YgYSAnV2lzZG9tIFNlZWRsaW5nLicgWW91J3JlIGN1bHRpdmF0aW5nIHlvdXIgZ2FyZGVuIG9mIGtub3dsZWRnZSB3aXRoIGNhcmUgYW5kIHBhdGllbmNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgMjNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiUHJvZGlnaW91cyBQcmVwYXJlclwiLCBkZXNjcmlwdGlvbjogXCJUaGFua3MgdG8geW91ciBwcmlvciBlZmZvcnRzLCB5b3UncmUgYSAnUHJvZGlnaW91cyBQcmVwYXJlciwnIHN0YW5kaW5nIHRhbGwgYW1vbmcgeW91ciBub3RlcyBhbmQgcmVhZHkgdG8gY29ucXVlciBuZXcgcmVhbG1zIG9mIHVuZGVyc3RhbmRpbmcuXCIgLCBsZXZlbDogXCJsZXZlbCAzMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFcGljIEVwaXBoYW55IEV4cGxvcmVyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgcGFzdCBub3RlcyBoYXZlIGxlZCB5b3UgdG8gdGhlIGdyYW5kICdFcGljIEVwaXBoYW55IEV4cGxvcmVyJyBzdGF0dXMhIFlvdSd2ZSBhbHJlYWR5IGJlZW4gZG93biBhIGZldyByYWJiaXQgaG9sZXMgYW5kIGNvbWUgb3V0IHdpdGggZGF6emxpbmcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEx1bWluYXJ5XCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBpbGx1bWluYXRpbmcgeW91ciBwYXRoLCB5b3UndmUgYmVjb21lIGEgJ0xvcmUgTHVtaW5hcnksJyBzaGluaW5nIGxpZ2h0IG9uIHRoZSBteXN0ZXJpZXMgb2YgdGhlIHVuaXZlcnNlLCBvbmUgaWRlYSBhdCBhIHRpbWUuXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY3JpYmUgb2YgdGhlIEFuY2llbnRzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgbWFzdGVyeSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFuYWdlbWVudCBoYXMgZWxldmF0ZWQgeW91IHRvIHRoZSBlc3RlZW1lZCByYW5rIG9mIHRoZSAnU2NyaWJlIG9mIHRoZSBBbmNpZW50cy4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSB0cmFuc2Zvcm1lZCBpbnRvIHRyZWFzdXJlcywgYnJpZGdpbmcgdGhlIGdhcCBiZXR3ZWVuIG9sZCB3aXNkb20gYW5kIG5ldyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV1cmVrYSBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkFybWVkIHdpdGggeW91ciBleGlzdGluZyBub3RlcywgeW91J3JlIHRoZSAnRXVyZWthIE1hZXN0cm8sJyBjb21wb3NpbmcgYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSB3aXRoIHRoZSBtZWxvZHkgb2YgZGlzY292ZXJ5LlwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2hyb25pY2xlcyBDaGFtcGlvblwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgc3RhbmRpbmcgYXMgYSB0ZXN0YW1lbnQsIHlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgaWxsdXN0cmlvdXMgJ0Nocm9uaWNsZXMgQ2hhbXBpb24nIGxldmVsLiBZb3VyIGpvdXJuZXkgdGhyb3VnaCB0aW1lJ3MgdGFwZXN0cnkgaGFzIGJyb3VnaHQgZm9ydGggYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSBwYXN0IGFuZCBwcmVzZW50LlwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyXCIsIGRlc2NyaXB0aW9uOiBcIkFzICdUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXIsJyB5b3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFwcGVkIG91dCB1bmNoYXJ0ZWQgdGVycml0b3JpZXMgb2YgdW5kZXJzdGFuZGluZy4gWW91ciBjdXJpb3NpdHkga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciBub3RlcyBhcmUgdGhlIGNvbXBhc3MgZ3VpZGluZyB5b3VyIGV4cGxvcmF0aW9uLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU3VsdGFuIG9mIFN5bnRoZXNpc1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFkZSB5b3UgdGhlICdTdWx0YW4gb2YgU3ludGhlc2lzLicgWW91J3JlIHRoZSBtYXN0ZXIgd2VhdmVyLCB0aHJlYWRpbmcgdG9nZXRoZXIgdGhyZWFkcyBvZiBpbmZvcm1hdGlvbiBpbnRvIGEgcmljaCB0YXBlc3RyeSBvZiBpbnNpZ2h0LlwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXRlcm5hbCBBcmNoaXZpc3RcIiwgZGVzY3JpcHRpb246IFwiQXQgdGhlIHBpbm5hY2xlIG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYXN0ZXJ5LCB5b3UncmUgbm93IHJldmVyZWQgYXMgdGhlICdFdGVybmFsIEFyY2hpdmlzdC4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMsIGNhcmVmdWxseSBjdXJhdGVkIGFuZCBudXJ0dXJlZCwgc3RhbmQgYXMgaW1tb3J0YWwgYmVhY29ucywgZ3VpZGluZyBzZWVrZXJzIHRocm91Z2ggdGhlIGxhYnlyaW50aCBvZiBrbm93bGVkZ2UgYWNyb3NzIGFnZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAxMDBcIiB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNJbml0W2luZGV4XVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIEV4YW1wbGUgdXNhZ2U6XHJcbiAgLy8gY29uc3QgY3VycmVudExldmVsID0gNDI7IC8vIFJlcGxhY2UgdGhpcyB3aXRoIHRoZSBhY3R1YWwgcGxheWVyJ3MgbGV2ZWxcclxuICAvLyBjb25zdCBiYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoY3VycmVudExldmVsKTtcclxuICAvLyBjb25zb2xlLmxvZyhgQ29uZ3JhdHVsYXRpb25zISBZb3UndmUgcmVhY2hlZCBMZXZlbCAke2N1cnJlbnRMZXZlbH0uIFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApO1xyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuICAgIC8qXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiB9LFxyXG4gICAgICAvLyBBZGQgbW9yZSBiYWRnZXMgaGVyZSBmb3IgbGV2ZWxzIDUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCBhbmQgMTAwXHJcbiAgICAgIC8vIEV4YW1wbGU6XHJcbiAgICAgIC8vIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiIH0sXHJcbiAgICAgIC8vIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgfSxcclxuICAgICAgLy8gLi4uYW5kIHNvIG9uXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgY29uc3QgbWF4TGV2ZWwgPTEwMDsgLy8gQXNzdW1pbmcgZWFjaCBiYWRnZSBpcyBhd2FyZGVkIGV2ZXJ5IDUgbGV2ZWxzXHJcbiAgICBjb25zdCBjYXBwZWRMZXZlbCA9IE1hdGgubWluKGxldmVsLCBtYXhMZXZlbCk7XHJcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoY2FwcGVkTGV2ZWwgLyA1KSAtIDE7XHJcbiAgICByZXR1cm4gYmFkZ2VzW2luZGV4XTtcclxuICB9XHJcbiAgXHJcblxyXG4gIGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIH1cclxuICAqL1xyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBMZXZlbERhdGEge1xyXG4gICAgcG9pbnRzOiBudW1iZXI7XHJcbiAgICBsZXZlbDogbnVtYmVyO1xyXG4gICAgcG9pbnRzTmV4dDogbnVtYmVyO1xyXG4gIH1cclxuICBcclxuICBjb25zdCBsZXZlbERhdGE6IExldmVsRGF0YVtdID0gW1xyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAwLCBwb2ludHNOZXh0OiAwfSxcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMSwgcG9pbnRzTmV4dDogMTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDAsIGxldmVsOiAyLCBwb2ludHNOZXh0OiAzMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMCwgbGV2ZWw6IDMsIHBvaW50c05leHQ6IDc1MDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwLCBsZXZlbDogNCwgcG9pbnRzTmV4dDogMTUwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTAwMCwgbGV2ZWw6IDUsIHBvaW50c05leHQ6IDMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAsIGxldmVsOiA2LCBwb2ludHNOZXh0OiA1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwMDAwLCBsZXZlbDogNywgcG9pbnRzTmV4dDogODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MDAwMCwgbGV2ZWw6IDgsIHBvaW50c05leHQ6IDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMDAwMCwgbGV2ZWw6IDksIHBvaW50c05leHQ6IDE3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3MDAwMCwgbGV2ZWw6IDEwLCBwb2ludHNOZXh0OiAyMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzAwMDAsIGxldmVsOiAxMSwgcG9pbnRzTmV4dDogMzAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwLCBsZXZlbDogMTIsIHBvaW50c05leHQ6IDM4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4MDAwMCwgbGV2ZWw6IDEzLCBwb2ludHNOZXh0OiA0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzAwMDAsIGxldmVsOiAxNCwgcG9pbnRzTmV4dDogNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjAwMDAwLCBsZXZlbDogMTUsIHBvaW50c05leHQ6IDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAwMCwgbGV2ZWw6IDE2LCBwb2ludHNOZXh0OiA5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjAwMDAsIGxldmVsOiAxNywgcG9pbnRzTmV4dDogMTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMTAwMDAsIGxldmVsOiAxOCwgcG9pbnRzTmV4dDogMTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMjAwMDAsIGxldmVsOiAxOSwgcG9pbnRzTmV4dDogMTU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1NTAwMDAsIGxldmVsOiAyMCwgcG9pbnRzTmV4dDogMTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4MDAwMDAsIGxldmVsOiAyMSwgcG9pbnRzTmV4dDogMjA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwNzAwMDAsIGxldmVsOiAyMiwgcG9pbnRzTmV4dDogMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzNjAwMDAsIGxldmVsOiAyMywgcG9pbnRzTmV4dDogMjY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2NzAwMDAsIGxldmVsOiAyNCwgcG9pbnRzTmV4dDogMzAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMDAsIGxldmVsOiAyNSwgcG9pbnRzTmV4dDogMzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNTAwMDAsIGxldmVsOiAyNiwgcG9pbnRzTmV4dDogMzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MjAwMDAsIGxldmVsOiAyNywgcG9pbnRzTmV4dDogNDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMTAwMDAsIGxldmVsOiAyOCwgcG9pbnRzTmV4dDogNDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MjAwMDAsIGxldmVsOiAyOSwgcG9pbnRzTmV4dDogNDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5NTAwMDAsIGxldmVsOiAzMCwgcG9pbnRzTmV4dDogNTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0MDAwMDAsIGxldmVsOiAzMSwgcG9pbnRzTmV4dDogNTg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU4NzAwMDAsIGxldmVsOiAzMiwgcG9pbnRzTmV4dDogNjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYzNjAwMDAsIGxldmVsOiAzMywgcG9pbnRzTmV4dDogNjg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY4NzAwMDAsIGxldmVsOiAzNCwgcG9pbnRzTmV4dDogNzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDAwMDAsIGxldmVsOiAzNSwgcG9pbnRzTmV4dDogNzk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5NTAwMDAsIGxldmVsOiAzNiwgcG9pbnRzTmV4dDogODUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg1MjAwMDAsIGxldmVsOiAzNywgcG9pbnRzTmV4dDogOTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkxMTAwMDAsIGxldmVsOiAzOCwgcG9pbnRzTmV4dDogOTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk3MjAwMDAsIGxldmVsOiAzOSwgcG9pbnRzTmV4dDogMTAzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDM1MDAwMCwgbGV2ZWw6IDQwLCBwb2ludHNOZXh0OiAxMTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMDAwMDAwLCBsZXZlbDogNDEsIHBvaW50c05leHQ6IDExNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTE2NzAwMDAsIGxldmVsOiA0MiwgcG9pbnRzTmV4dDogMTIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjM2MDAwMCwgbGV2ZWw6IDQzLCBwb2ludHNOZXh0OiAxMzA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMDcwMDAwLCBsZXZlbDogNDQsIHBvaW50c05leHQ6IDEzODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTM4MDAwMDAsIGxldmVsOiA0NSwgcG9pbnRzTmV4dDogMTQ1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNDU1MDAwMCwgbGV2ZWw6IDQ2LCBwb2ludHNOZXh0OiAxNTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MzIwMDAwLCBsZXZlbDogNDcsIHBvaW50c05leHQ6IDE2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTYxMTAwMDAsIGxldmVsOiA0OCwgcG9pbnRzTmV4dDogMTY5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjkyMDAwMCwgbGV2ZWw6IDQ5LCBwb2ludHNOZXh0OiAxNzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3NzUwMDAwLCBsZXZlbDogNTAsIHBvaW50c05leHQ6IDE4NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTg2MDAwMDAsIGxldmVsOiA1MSwgcG9pbnRzTmV4dDogMTk0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxOTQ3MDAwMCwgbGV2ZWw6IDUyLCBwb2ludHNOZXh0OiAyMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwMzYwMDAwLCBsZXZlbDogNTMsIHBvaW50c05leHQ6IDIxMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjEyNzAwMDAsIGxldmVsOiA1NCwgcG9pbnRzTmV4dDogMjIyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMjIwMDAwMCwgbGV2ZWw6IDU1LCBwb2ludHNOZXh0OiAyMzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMTUwMDAwLCBsZXZlbDogNTYsIHBvaW50c05leHQ6IDI0MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjQxMjAwMDAsIGxldmVsOiA1NywgcG9pbnRzTmV4dDogMjUxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNTExMDAwMCwgbGV2ZWw6IDU4LCBwb2ludHNOZXh0OiAyNjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2MTIwMDAwLCBsZXZlbDogNTksIHBvaW50c05leHQ6IDI3MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjcxNTAwMDAsIGxldmVsOiA2MCwgcG9pbnRzTmV4dDogMjgyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyODIwMDAwMCwgbGV2ZWw6IDYxLCBwb2ludHNOZXh0OiAyOTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI5MjcwMDAwLCBsZXZlbDogNjIsIHBvaW50c05leHQ6IDMwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAzNjAwMDAsIGxldmVsOiA2MywgcG9pbnRzTmV4dDogMzE0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMTQ3MDAwMCwgbGV2ZWw6IDY0LCBwb2ludHNOZXh0OiAzMjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMyNjAwMDAwLCBsZXZlbDogNjUsIHBvaW50c05leHQ6IDMzNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM3NTAwMDAsIGxldmVsOiA2NiwgcG9pbnRzTmV4dDogMzQ5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNDkyMDAwMCwgbGV2ZWw6IDY3LCBwb2ludHNOZXh0OiAzNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM2MTEwMDAwLCBsZXZlbDogNjgsIHBvaW50c05leHQ6IDM3MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzczMjAwMDAsIGxldmVsOiA2OSwgcG9pbnRzTmV4dDogMzg1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODU1MDAwMCwgbGV2ZWw6IDcwLCBwb2ludHNOZXh0OiAzOTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM5ODAwMDAwLCBsZXZlbDogNzEsIHBvaW50c05leHQ6IDQxMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDEwNzAwMDAsIGxldmVsOiA3MiwgcG9pbnRzTmV4dDogNDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MjM2MDAwMCwgbGV2ZWw6IDczLCBwb2ludHNOZXh0OiA0MzY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQzNjcwMDAwLCBsZXZlbDogNzQsIHBvaW50c05leHQ6IDQ1MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUwMDAwMDAsIGxldmVsOiA3NSwgcG9pbnRzTmV4dDogNDYzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NjM1MDAwMCwgbGV2ZWw6IDc2LCBwb2ludHNOZXh0OiA0NzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3NzIwMDAwLCBsZXZlbDogNzcsIHBvaW50c05leHQ6IDQ5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDkxMTAwMDAsIGxldmVsOiA3OCwgcG9pbnRzTmV4dDogNTA1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDUyMDAwMCwgbGV2ZWw6IDc5LCBwb2ludHNOZXh0OiA1MTk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUxOTUwMDAwLCBsZXZlbDogODAsIHBvaW50c05leHQ6IDUzNDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTM0MDAwMDAsIGxldmVsOiA4MSwgcG9pbnRzTmV4dDogNTQ4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDg3MDAwMCwgbGV2ZWw6IDgyLCBwb2ludHNOZXh0OiA1NjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU2MzYwMDAwLCBsZXZlbDogODMsIHBvaW50c05leHQ6IDU3ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTc4NzAwMDAsIGxldmVsOiA4NCwgcG9pbnRzTmV4dDogNTk0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1OTQwMDAwMCwgbGV2ZWw6IDg1LCBwb2ludHNOZXh0OiA2MDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwOTUwMDAwLCBsZXZlbDogODYsIHBvaW50c05leHQ6IDYyNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjI1MjAwMDAsIGxldmVsOiA4NywgcG9pbnRzTmV4dDogNjQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NDExMDAwMCwgbGV2ZWw6IDg4LCBwb2ludHNOZXh0OiA2NTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY1NzIwMDAwLCBsZXZlbDogODksIHBvaW50c05leHQ6IDY3MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjczNTAwMDAsIGxldmVsOiA5MCwgcG9pbnRzTmV4dDogNjkwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2OTAwMDAwMCwgbGV2ZWw6IDkxLCBwb2ludHNOZXh0OiA3MDY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcwNjcwMDAwLCBsZXZlbDogOTIsIHBvaW50c05leHQ6IDcyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzIzNjAwMDAsIGxldmVsOiA5MywgcG9pbnRzTmV4dDogNzQwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDA3MDAwMCwgbGV2ZWw6IDk0LCBwb2ludHNOZXh0OiA3NTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1ODAwMDAwLCBsZXZlbDogOTUsIHBvaW50c05leHQ6IDc3NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzc1NTAwMDAsIGxldmVsOiA5NiwgcG9pbnRzTmV4dDogNzkzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTMyMDAwMCwgbGV2ZWw6IDk3LCBwb2ludHNOZXh0OiA4MTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgxMTEwMDAwLCBsZXZlbDogOTgsIHBvaW50c05leHQ6IDgyOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODI5MjAwMDAsIGxldmVsOiA5OSwgcG9pbnRzTmV4dDogODQ3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NDc1MDAwMCwgbGV2ZWw6IDEwMCwgcG9pbnRzTmV4dDogODY2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NjYwMDAwMCwgbGV2ZWw6IDEwMSwgcG9pbnRzTmV4dDogODg0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4ODQ3MDAwMCwgbGV2ZWw6IDEwMiwgcG9pbnRzTmV4dDogOTAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MDM2MDAwMCwgbGV2ZWw6IDEwMywgcG9pbnRzTmV4dDogOTIyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjI3MDAwMCwgbGV2ZWw6IDEwNCwgcG9pbnRzTmV4dDogOTQyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NDIwMDAwMCwgbGV2ZWw6IDEwNSwgcG9pbnRzTmV4dDogOTYxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NjE1MDAwMCwgbGV2ZWw6IDEwNiwgcG9pbnRzTmV4dDogOTgxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5ODEyMDAwMCwgbGV2ZWw6IDEwNywgcG9pbnRzTmV4dDogMTAwMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMTEwMDAwLCBsZXZlbDogMTA4LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDIxMjAwMDAsIGxldmVsOiAxMDksIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwNDE1MDAwMCwgbGV2ZWw6IDExMCwgcG9pbnRzTmV4dDogMTA2MTUwMDAwIH0sXHJcbiAgXTtcclxuICBcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzOiBudW1iZXIpOiBMZXZlbERhdGEge1xyXG4gICAgbGV0IGxldmVsIDpMZXZlbERhdGEgPSBsZXZlbERhdGFbMF07XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmIChwb2ludHMgPj0gZGF0YS5wb2ludHMpIHtcclxuICAgICAgICBsZXZlbCA9IGRhdGE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsZXZlbDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBzdGF0dXNQb2ludHNGb3JMZXZlbCh0YXJnZXRMZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBzdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAodGFyZ2V0TGV2ZWwgPT0gZGF0YS5sZXZlbCAmJiBzdGF0dXNQb2ludHMgPT0gMCkge1xyXG4gICAgICAgIHN0YXR1c1BvaW50cyA9IGRhdGEucG9pbnRzO1xyXG4gICAgICB9IFxyXG4gICAgfVxyXG5cclxuXHRcdFxyXG5cdFx0cmV0dXJuIHN0YXR1c1BvaW50c1xyXG4gIH1cclxuICBcclxuXHJcbi8qXHJcbmNvbnN0IHBvaW50cyA9IDU1MDA7XHJcbmNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzKTtcclxuY29uc29sZS5sb2coYFdpdGggJHtwb2ludHN9IHBvaW50cywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgJHtsZXZlbH0uYCk7XHJcbiovIiwgImNvbnN0IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlOiBzdHJpbmdbXSA9IFtcclxuXHRcIlNldmVuIGRheXMgb2Ygbm90ZS10YWtpbmc/IFlvdSdyZSBwcmFjdGljYWxseSBhIG5vdGUgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgZmllc3RhISBcdUQ4M0NcdURGODlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgcGFydHkgZ29pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIFlvdSdyZSBsaWtlIHRoZSBKYW1lcyBCb25kIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURENzZcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2VjcmV0IGFnZW50IVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAnTm90ZS1BLURheScgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2FwZXMgb3B0aW9uYWwhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSd2ZSBwcmFjdGljYWxseSB3cml0dGVuIGEgbWluaSBub3ZlbCBieSBub3chIFx1RDgzRFx1RENEQVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBhdXRob3Igc3RhdHVzIGFjaGlldmVkIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBVc2FpbiBCb2x0IG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc3ByaW50aW5nIHRvd2FyZHMga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNwcmVlISBJdCdzIGxpa2UgYSBub3Rlcy1wbG9zaW9uISBcdUQ4M0RcdURDQTVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgZmlyZXdvcmtzIGNvbWluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGJhc2ljYWxseSB0aGUgTWljaGFlbCBKb3JkYW4gb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDMFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzbGFtIGR1bmshXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTVZQISBcdUQ4M0NcdURGQzZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzY29yaW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlICdTZXZlbiBEYXkgTm90ZSBGZXZlcicgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXRjaCB0aGUgZmV2ZXIhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIHJvY2tzdGFyISBcdUQ4M0NcdURGQjhcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBqYW1taW4nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIG1hZ2ljIHNob3chIE5vdyB5b3Ugc2VlIHRoZSBub3Rlcywgbm93IHlvdSBkb24ndCEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMsIGtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgbGlrZSBhIG5vdGUtdGFraW5nIEplZGkgTWFzdGVyISBcdUQ4M0NcdURGMENcdTI2OTRcdUZFMEYgW1hdIHBvaW50cywgbWF5IHRoZSBub3RlcyBiZSB3aXRoIHlvdSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTWFjR3l2ZXIsIHR1cm5pbmcgaW5mb3JtYXRpb24gaW50byBzb2x1dGlvbnMhIFx1RDgzRFx1REQyN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNyYWZ0aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgY2hlZiwgY29va2luZyB1cCBhIGtub3dsZWRnZSBmZWFzdCEgXHVEODNDXHVERjczXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY29va2luZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0MFx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIExld2lzIGFuZCBDbGFyaywgY2hhcnRpbmcgbmV3IHRlcnJpdG9yaWVzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEREZBXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBkZXRlY3RpdmUsIHNvbHZpbmcgY2FzZXMgb2YgY3VyaW9zaXR5ISBcdUQ4M0RcdURENzVcdUZFMEZcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBkZXRlY3RpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBwaW9uZWVyLCBibGF6aW5nIHRyYWlscyB0aHJvdWdoIHRoZSBmb3Jlc3RzIG9mIGluZm9ybWF0aW9uISBcdUQ4M0NcdURGMzJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwaW9uZWVyaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiXHJcbl07XHJcblxyXG5jb25zdCB0d29Ob3RlTWVzc2FnZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQm9vbSEgWW91IGp1c3QgYWNlZCB0aGUgMi1ub3RlIHRhbmdvISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIGdyb292aW4nIVwiLFxyXG5cdFwiVHdvIG5vdGVzIGluIGEgZGF5PyBZb3UncmUgb2ZmaWNpYWxseSBhIE5vdGUgTmluamEhIFx1RDgzRVx1REQ0QiBbWF0gcG9pbnRzIGVhcm5lZC4gUm9jayBvbiFcIixcclxuXHRcIkhpZ2gtZml2ZSEgWW91J3ZlIGNvbnF1ZXJlZCB0aGUgMi1ub3RlIHJvZGVvISBcdUQ4M0VcdUREMjAgW1hdIHBvaW50cyBlYXJuZWQuIFllZWhhdyFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlISBUd28gbm90ZXMgaW4gb25lIGRheSwgeW91IGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFR3byBub3RlcyBpbiBhIGRheSAtIHdoYXQncyB5b3VyIHNlY3JldCB3ZWFwb24/IFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiS2Fib29tISBZb3UganVzdCBibGV3IHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgd2F0ZXIhIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAyLW5vdGUgc3VwZXJzdGFyISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBpbiB0aGUgYmFnLiBLZWVwIHNoaW5pbmchXCIsXHJcblx0XCJEb3VibGUgdXAsIGRvdWJsZSBkb3duISBUd28gbm90ZXMgaW4gb25lIGRheSAtIHlvdSdyZSBhIHJvY2tzdGFyISBcdUQ4M0NcdURGQjggW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIHBhcnR5ISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIkthLWNoaW5nISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSByYWNraW5nIHVwIHRob3NlIHBvaW50cyEgXHVEODNEXHVEQ0IwIFtYXSBlYXJuZWQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFnaWNpYW4hIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCB0cmljaz9cIixcclxuXHRcIlR3byBub3Rlcz8gTmFpbGVkIGl0ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgZ29pbmchXCIsXHJcblx0XCJBYnJhLWNhZGFicmEhIFR3byBub3RlcyBhcHBlYXIhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSwgZG91YmxlIHRoZSBmdW4hIFR3byBub3RlcyBpbiBvbmUgZGF5ISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIGZpZXN0YSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fwb3chIFR3byBub3RlcyBpbiBhIGRheSAtIHlvdSdyZSBhIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGIFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgYWR2ZW50dXJlP1wiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiXHJcbl07XHJcblxyXG5jb25zdCByYW5kb21Qb2ludE5vdGljZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQmF6aW5nYSEgWW91IGp1c3Qgc25hZ2dlZCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiS2Fib29tISBbWF0gcG9pbnRzIGFyZSBub3cgaW4geW91ciBwb2NrZXQhXCIsXHJcblx0XCJXb29ob28hIFtYXSBwb2ludHMgZWFybmVkISBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiUG9pbnRzIGFob3khIFtYXSBtb3JlIGluIHRoZSBiYW5rIVwiLFxyXG5cdFwiU2NvcmUhIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciB0b3RhbCFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJaaXBwaXR5LXphcCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQ2hhbXBpb24gbW92ZSEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJCaW5nbyEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJTaGF6YW0hIFtYXSBwb2ludHMgdG8gdGhlIHJlc2N1ZSFcIixcclxuXHRcIkthLWNoaW5nISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlN1cGVyYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJCcmF2byEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiV2VsbCBkb25lISBbWF0gbW9yZSBwb2ludHMgaW4gdG93IVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzLCBqdXN0IGxpa2UgdGhhdCFcIixcclxuXHRcIkEgcm91bmQgb2YgYXBwbGF1c2UgZm9yIFtYXSBwb2ludHMhXCIsXHJcblx0XCJXaG9vc2ghIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiV29vISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiR3JlYXQgam9iISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkZhbnRhc3RpYyEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiSG9vcmF5ISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIk5pY2Ugb25lISBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQhXCIsXHJcblx0XCJXb290IHdvb3QhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJhbSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiQ29vbCBiZWFucyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJTcGxlbmRpZCEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTWFydmVsb3VzISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphbnkhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkV4cXVpc2l0ZSEgW1hdIHBvaW50cyBpbiB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiT3V0c3RhbmRpbmchIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIGpvYiFcIixcclxuXHRcIk1hZ25pZmljZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiVGVycmlmaWMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlN1cGVyYiEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIkV4Y2VsbGVudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiQXdlc29tZSEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiV2VsbCBwbGF5ZWQhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJJbXByZXNzaXZlISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQnJpbGxpYW50ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJOaWNlIG1vdmUhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlN0ZWxsYXIhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiV2VsbCBkZXNlcnZlZCEgW1hdIHBvaW50cyBlYXJuZWQhXCJcclxuXTtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZS5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZVtyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdHdvTm90ZU1lc3NhZ2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHR3b05vdGVNZXNzYWdlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyhwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiByYW5kb21Qb2ludE5vdGljZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gcmFuZG9tUG9pbnROb3RpY2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuLy8gRXhhbXBsZSB1c2FnZVxyXG4vLyBjb25zdCByYW5kb21Qb2ludHMgPSAxMDA7IC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjdHVhbCBwb2ludHMgdmFsdWVcclxuLy8gY29uc3QgcmFuZG9tTWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocmFuZG9tUG9pbnRzKTtcclxuLy8gY29uc29sZS5sb2cocmFuZG9tTWVzc2FnZSk7XHJcblxyXG5cclxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQSxtQkFBcUU7OztBQ0FyRSxzQkFBK0M7QUFHeEMsSUFBTSxrQkFBc0M7QUFBQSxFQUNqRCxtQkFBbUI7QUFBQSxFQUNuQixXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxnQkFBZ0I7QUFBQSxFQUNoQixhQUFhO0FBQUEsRUFDYixlQUFlO0FBQUEsRUFDZixzQkFBc0I7QUFBQSxFQUN0QixzQkFBc0I7QUFBQSxFQUN0QixhQUFhO0FBQUEsRUFDYixrQkFBa0I7QUFBQSxFQUNsQix3QkFBd0I7QUFBQSxFQUN4QixjQUFjO0FBQUEsRUFDZCxhQUFhO0FBQUEsRUFDYixnQkFBZ0I7QUFBQSxFQUNoQix1QkFBdUI7QUFBQSxFQUN2QixtQkFBbUI7QUFBQSxFQUNuQixvQkFBb0I7QUFBQSxFQUNwQixPQUFPO0FBQUEsRUFDUCx1QkFBdUI7QUFBQSxFQUN2Qix1QkFBdUI7QUFBQSxFQUN2Qix3QkFBd0I7QUFBQSxFQUN4Qix3QkFBd0I7QUFBQSxFQUN4QixlQUFlO0FBQUEsRUFDZixtQkFBbUI7QUFDckI7QUE4Qk8sSUFBTSw2QkFBTixjQUF5QyxpQ0FBaUI7QUFBQSxFQTRCaEUsWUFBWUMsTUFBVSxRQUFzQjtBQUMxQyxVQUFNQSxNQUFLLE1BQU07QUFDakIsU0FBSyxTQUFTO0FBQUEsRUFDaEI7QUFBQSxFQUVPLFVBQWdCO0FBQ3RCLFVBQU0sRUFBRSxZQUFZLElBQUk7QUFDeEIsZ0JBQVksU0FBUyxxQkFBcUI7QUFDMUMsU0FBSyxZQUFZLE1BQU07QUFFdkIsVUFBTSxZQUFZLFlBQVksVUFBVSxRQUFRO0FBQ2hELGNBQVUsU0FBUyxlQUFlO0FBQ2xDLFVBQU0sYUFBYSxVQUFVLFNBQVMsS0FBSztBQUFBLE1BQzNDLE1BQU07QUFBQSxJQUNOLENBQUM7QUFDRCxVQUFNLFlBQVksV0FBVyxTQUFTLE9BQU87QUFBQSxNQUM3QyxNQUFNO0FBQUEsUUFDTCxLQUFLO0FBQUEsTUFDTjtBQUFBLElBQ0EsQ0FBQztBQUNELGNBQVUsU0FBUztBQUtuQixnQkFBWSxTQUFTLE1BQU0sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLFlBQVEsSUFBSSxpQkFBaUI7QUFDN0IsUUFBSSx3QkFBUSxXQUFXLEVBQ3JCLFFBQVEsaUJBQWlCLEVBQ3pCLFFBQVEsb0VBQW9FLEVBQzVFLFFBQVEsVUFBUSxLQUNmLGVBQWUsc0NBQWlDLEVBQ2hELFNBQVMsS0FBSyxPQUFPLFNBQVMsV0FBVyxFQUN6QyxTQUFTLE9BQU8sVUFBVTtBQUMxQixXQUFLLE9BQU8sU0FBUyxjQUFjO0FBQ25DLFlBQU0sS0FBSyxPQUFPLGFBQWE7QUFBQSxJQUNoQyxDQUFDLENBQUM7QUFHSixRQUFJLHdCQUFRLFdBQVcsRUFDckIsUUFBUSxrQkFBa0IsRUFDMUIsUUFBUSxtRUFBbUUsRUFDM0UsUUFBUSxVQUFRLEtBQ2YsZUFBZSxxQ0FBZ0MsRUFDL0MsU0FBUyxLQUFLLE9BQU8sU0FBUyxhQUFhLEVBQzNDLFNBQVMsT0FBTyxVQUFVO0FBRTFCLFdBQUssT0FBTyxTQUFTLGdCQUFnQjtBQUNyQyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDaEMsQ0FBQyxDQUFDO0FBRUosUUFBSSx3QkFBUSxXQUFXLEVBQ3JCLFFBQVEsbUJBQW1CLEVBQzNCLFFBQVEsZ0VBQWdFLEVBQ3hFLFFBQVEsVUFBUSxLQUNkLGVBQWUsTUFBTSxFQUNyQixTQUFTLEtBQUssT0FBTyxTQUFTLGNBQWMsRUFDNUMsU0FBUyxPQUFPLFVBQVU7QUFFMUIsV0FBSyxPQUFPLFNBQVMsaUJBQWlCO0FBQ3RDLFlBQU0sS0FBSyxPQUFPLGFBQWE7QUFBQSxJQUNqQyxDQUFDLENBQUM7QUFFRixnQkFBWSxTQUFTLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELFFBQUksd0JBQVEsV0FBVyxFQUNyQixRQUFRLHNCQUFzQixFQUM5QixRQUFRLHdGQUF3RixFQUNoRztBQUFBLE1BQVUsQ0FBQyxXQUNYLE9BQ1MsU0FBUyxLQUFLLE9BQU8sU0FBUyxpQkFBaUIsRUFDaEQsU0FBUyxDQUFDLFVBQVU7QUFDakIsYUFBSyxPQUFPLFNBQVMsb0JBQW9CO0FBQ3pDLGFBQUssT0FBTyxTQUFTLEtBQUssT0FBTyxRQUFRO0FBQUEsTUFDM0MsQ0FBQztBQUFBLElBQ1g7QUFHRCxRQUFJLHdCQUFRLFdBQVcsRUFDckIsUUFBUSwrREFBK0QsS0FBSyxPQUFPLFNBQVMsY0FBYyxFQUMxRyxRQUFRLDhFQUE4RSxFQUN0RixRQUFRLFVBQVEsS0FDZCxlQUFlLHlCQUF5QixFQUN4QyxTQUFTLEtBQUssT0FBTyxTQUFTLHVCQUF1QixTQUFTLENBQUMsRUFDL0QsU0FBUyxPQUFPLFVBQVU7QUFDMUIsV0FBSyxPQUFPLFNBQVMseUJBQXlCLFNBQVMsS0FBSztBQUM1RCxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDakMsQ0FBQyxDQUFDO0FBSUosUUFBSSx3QkFBUSxXQUFXLEVBQ3JCLFFBQVEsMkJBQTJCLEVBQ25DLFFBQVEsNERBQTRELEVBQ3BFLFFBQVEsVUFBUSxLQUNkLGVBQWUsdUJBQXVCLEVBQ3RDLFNBQVMsS0FBSyxPQUFPLFNBQVMsb0JBQW9CLEVBQ2xELFNBQVMsT0FBTyxVQUFVO0FBRTFCLFdBQUssT0FBTyxTQUFTLHVCQUF1QjtBQUM1QyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDakMsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxVQUFRLEtBQ2QsZUFBZSx1QkFBdUIsRUFDdEMsU0FBUyxLQUFLLE9BQU8sU0FBUyxvQkFBb0IsRUFDbEQsU0FBUyxPQUFPLFVBQVU7QUFFMUIsV0FBSyxPQUFPLFNBQVMsdUJBQXVCO0FBQzVDLFlBQU0sS0FBSyxPQUFPLGFBQWE7QUFBQSxJQUNsQyxDQUFDLENBQUM7QUFBQSxFQUVKO0FBQ0M7OztBQ3JNYSxTQUFSLFFBQXlCLEtBQUs7QUFDbkM7QUFFQSxTQUFPLFVBQVUsY0FBYyxPQUFPLFVBQVUsWUFBWSxPQUFPLE9BQU8sV0FBVyxTQUFVQyxNQUFLO0FBQ2xHLFdBQU8sT0FBT0E7QUFBQSxFQUNoQixJQUFJLFNBQVVBLE1BQUs7QUFDakIsV0FBT0EsUUFBTyxjQUFjLE9BQU8sVUFBVUEsS0FBSSxnQkFBZ0IsVUFBVUEsU0FBUSxPQUFPLFlBQVksV0FBVyxPQUFPQTtBQUFBLEVBQzFILEdBQUcsUUFBUSxHQUFHO0FBQ2hCOzs7QUNSZSxTQUFSLGFBQThCLFVBQVUsTUFBTTtBQUNuRCxNQUFJLEtBQUssU0FBUyxVQUFVO0FBQzFCLFVBQU0sSUFBSSxVQUFVLFdBQVcsZUFBZSxXQUFXLElBQUksTUFBTSxNQUFNLHlCQUF5QixLQUFLLFNBQVMsVUFBVTtBQUFBLEVBQzVIO0FBQ0Y7OztBQzhCZSxTQUFSLE9BQXdCLE9BQU87QUFDcEMsZUFBYSxHQUFHLFNBQVM7QUFDekIsU0FBTyxpQkFBaUIsUUFBUSxRQUFRLEtBQUssTUFBTSxZQUFZLE9BQU8sVUFBVSxTQUFTLEtBQUssS0FBSyxNQUFNO0FBQzNHOzs7QUNMZSxTQUFSLE9BQXdCLFVBQVU7QUFDdkMsZUFBYSxHQUFHLFNBQVM7QUFDekIsTUFBSSxTQUFTLE9BQU8sVUFBVSxTQUFTLEtBQUssUUFBUTtBQUdwRCxNQUFJLG9CQUFvQixRQUFRLFFBQVEsUUFBUSxNQUFNLFlBQVksV0FBVyxpQkFBaUI7QUFFNUYsV0FBTyxJQUFJLEtBQUssU0FBUyxRQUFRLENBQUM7QUFBQSxFQUNwQyxXQUFXLE9BQU8sYUFBYSxZQUFZLFdBQVcsbUJBQW1CO0FBQ3ZFLFdBQU8sSUFBSSxLQUFLLFFBQVE7QUFBQSxFQUMxQixPQUFPO0FBQ0wsU0FBSyxPQUFPLGFBQWEsWUFBWSxXQUFXLHNCQUFzQixPQUFPLFlBQVksYUFBYTtBQUVwRyxjQUFRLEtBQUssb05BQW9OO0FBRWpPLGNBQVEsS0FBSyxJQUFJLE1BQU0sRUFBRSxLQUFLO0FBQUEsSUFDaEM7QUFDQSxXQUFPLElBQUksS0FBSyxHQUFHO0FBQUEsRUFDckI7QUFDRjs7O0FDakJlLFNBQVIsUUFBeUIsV0FBVztBQUN6QyxlQUFhLEdBQUcsU0FBUztBQUN6QixNQUFJLENBQUMsT0FBTyxTQUFTLEtBQUssT0FBTyxjQUFjLFVBQVU7QUFDdkQsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLE9BQU8sT0FBTyxTQUFTO0FBQzNCLFNBQU8sQ0FBQyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQzVCOzs7QUN6Q2UsU0FBUixVQUEyQixhQUFhO0FBQzdDLE1BQUksZ0JBQWdCLFFBQVEsZ0JBQWdCLFFBQVEsZ0JBQWdCLE9BQU87QUFDekUsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLFNBQVMsT0FBTyxXQUFXO0FBQy9CLE1BQUksTUFBTSxNQUFNLEdBQUc7QUFDakIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLFNBQVMsSUFBSSxLQUFLLEtBQUssTUFBTSxJQUFJLEtBQUssTUFBTSxNQUFNO0FBQzNEOzs7QUNZZSxTQUFSLGdCQUFpQyxXQUFXLGFBQWE7QUFDOUQsZUFBYSxHQUFHLFNBQVM7QUFDekIsTUFBSSxZQUFZLE9BQU8sU0FBUyxFQUFFLFFBQVE7QUFDMUMsTUFBSSxTQUFTLFVBQVUsV0FBVztBQUNsQyxTQUFPLElBQUksS0FBSyxZQUFZLE1BQU07QUFDcEM7OztBQ0xlLFNBQVIsZ0JBQWlDLFdBQVcsYUFBYTtBQUM5RCxlQUFhLEdBQUcsU0FBUztBQUN6QixNQUFJLFNBQVMsVUFBVSxXQUFXO0FBQ2xDLFNBQU8sZ0JBQWdCLFdBQVcsQ0FBQyxNQUFNO0FBQzNDOzs7QUN2QkEsSUFBSSxzQkFBc0I7QUFDWCxTQUFSLGdCQUFpQyxXQUFXO0FBQ2pELGVBQWEsR0FBRyxTQUFTO0FBQ3pCLE1BQUksT0FBTyxPQUFPLFNBQVM7QUFDM0IsTUFBSSxZQUFZLEtBQUssUUFBUTtBQUM3QixPQUFLLFlBQVksR0FBRyxDQUFDO0FBQ3JCLE9BQUssWUFBWSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQzNCLE1BQUksdUJBQXVCLEtBQUssUUFBUTtBQUN4QyxNQUFJLGFBQWEsWUFBWTtBQUM3QixTQUFPLEtBQUssTUFBTSxhQUFhLG1CQUFtQixJQUFJO0FBQ3hEOzs7QUNWZSxTQUFSLGtCQUFtQyxXQUFXO0FBQ25ELGVBQWEsR0FBRyxTQUFTO0FBQ3pCLE1BQUksZUFBZTtBQUNuQixNQUFJLE9BQU8sT0FBTyxTQUFTO0FBQzNCLE1BQUksTUFBTSxLQUFLLFVBQVU7QUFDekIsTUFBSSxRQUFRLE1BQU0sZUFBZSxJQUFJLEtBQUssTUFBTTtBQUNoRCxPQUFLLFdBQVcsS0FBSyxXQUFXLElBQUksSUFBSTtBQUN4QyxPQUFLLFlBQVksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUMzQixTQUFPO0FBQ1Q7OztBQ1JlLFNBQVIsa0JBQW1DLFdBQVc7QUFDbkQsZUFBYSxHQUFHLFNBQVM7QUFDekIsTUFBSSxPQUFPLE9BQU8sU0FBUztBQUMzQixNQUFJLE9BQU8sS0FBSyxlQUFlO0FBQy9CLE1BQUksNEJBQTRCLElBQUksS0FBSyxDQUFDO0FBQzFDLDRCQUEwQixlQUFlLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDdkQsNEJBQTBCLFlBQVksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoRCxNQUFJLGtCQUFrQixrQkFBa0IseUJBQXlCO0FBQ2pFLE1BQUksNEJBQTRCLElBQUksS0FBSyxDQUFDO0FBQzFDLDRCQUEwQixlQUFlLE1BQU0sR0FBRyxDQUFDO0FBQ25ELDRCQUEwQixZQUFZLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEQsTUFBSSxrQkFBa0Isa0JBQWtCLHlCQUF5QjtBQUNqRSxNQUFJLEtBQUssUUFBUSxLQUFLLGdCQUFnQixRQUFRLEdBQUc7QUFDL0MsV0FBTyxPQUFPO0FBQUEsRUFDaEIsV0FBVyxLQUFLLFFBQVEsS0FBSyxnQkFBZ0IsUUFBUSxHQUFHO0FBQ3RELFdBQU87QUFBQSxFQUNULE9BQU87QUFDTCxXQUFPLE9BQU87QUFBQSxFQUNoQjtBQUNGOzs7QUNuQmUsU0FBUixzQkFBdUMsV0FBVztBQUN2RCxlQUFhLEdBQUcsU0FBUztBQUN6QixNQUFJLE9BQU8sa0JBQWtCLFNBQVM7QUFDdEMsTUFBSSxrQkFBa0IsSUFBSSxLQUFLLENBQUM7QUFDaEMsa0JBQWdCLGVBQWUsTUFBTSxHQUFHLENBQUM7QUFDekMsa0JBQWdCLFlBQVksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN0QyxNQUFJLE9BQU8sa0JBQWtCLGVBQWU7QUFDNUMsU0FBTztBQUNUOzs7QUNQQSxJQUFJLHVCQUF1QjtBQUNaLFNBQVIsY0FBK0IsV0FBVztBQUMvQyxlQUFhLEdBQUcsU0FBUztBQUN6QixNQUFJLE9BQU8sT0FBTyxTQUFTO0FBQzNCLE1BQUksT0FBTyxrQkFBa0IsSUFBSSxFQUFFLFFBQVEsSUFBSSxzQkFBc0IsSUFBSSxFQUFFLFFBQVE7QUFLbkYsU0FBTyxLQUFLLE1BQU0sT0FBTyxvQkFBb0IsSUFBSTtBQUNuRDs7O0FDZEEsSUFBSSxpQkFBaUIsQ0FBQztBQUNmLFNBQVMsb0JBQW9CO0FBQ2xDLFNBQU87QUFDVDs7O0FDQ2UsU0FBUixlQUFnQyxXQUFXLFNBQVM7QUFDekQsTUFBSSxNQUFNLE9BQU8sT0FBTyx1QkFBdUIsaUJBQWlCLHVCQUF1Qix1QkFBdUI7QUFDOUcsZUFBYSxHQUFHLFNBQVM7QUFDekIsTUFBSUMsa0JBQWlCLGtCQUFrQjtBQUN2QyxNQUFJLGVBQWUsV0FBVyxRQUFRLFNBQVMsU0FBUyx3QkFBd0IsWUFBWSxRQUFRLFlBQVksU0FBUyxTQUFTLFFBQVEsa0JBQWtCLFFBQVEsMEJBQTBCLFNBQVMsd0JBQXdCLFlBQVksUUFBUSxZQUFZLFNBQVMsVUFBVSxrQkFBa0IsUUFBUSxZQUFZLFFBQVEsb0JBQW9CLFNBQVMsVUFBVSx3QkFBd0IsZ0JBQWdCLGFBQWEsUUFBUSwwQkFBMEIsU0FBUyxTQUFTLHNCQUFzQixrQkFBa0IsUUFBUSxVQUFVLFNBQVMsUUFBUUEsZ0JBQWUsa0JBQWtCLFFBQVEsVUFBVSxTQUFTLFNBQVMsd0JBQXdCQSxnQkFBZSxZQUFZLFFBQVEsMEJBQTBCLFNBQVMsVUFBVSx5QkFBeUIsc0JBQXNCLGFBQWEsUUFBUSwyQkFBMkIsU0FBUyxTQUFTLHVCQUF1QixrQkFBa0IsUUFBUSxTQUFTLFNBQVMsT0FBTyxDQUFDO0FBR3A0QixNQUFJLEVBQUUsZ0JBQWdCLEtBQUssZ0JBQWdCLElBQUk7QUFDN0MsVUFBTSxJQUFJLFdBQVcsa0RBQWtEO0FBQUEsRUFDekU7QUFDQSxNQUFJLE9BQU8sT0FBTyxTQUFTO0FBQzNCLE1BQUksTUFBTSxLQUFLLFVBQVU7QUFDekIsTUFBSSxRQUFRLE1BQU0sZUFBZSxJQUFJLEtBQUssTUFBTTtBQUNoRCxPQUFLLFdBQVcsS0FBSyxXQUFXLElBQUksSUFBSTtBQUN4QyxPQUFLLFlBQVksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUMzQixTQUFPO0FBQ1Q7OztBQ2ZlLFNBQVIsZUFBZ0MsV0FBVyxTQUFTO0FBQ3pELE1BQUksTUFBTSxPQUFPLE9BQU8sdUJBQXVCLGlCQUFpQix1QkFBdUIsdUJBQXVCO0FBQzlHLGVBQWEsR0FBRyxTQUFTO0FBQ3pCLE1BQUksT0FBTyxPQUFPLFNBQVM7QUFDM0IsTUFBSSxPQUFPLEtBQUssZUFBZTtBQUMvQixNQUFJQyxrQkFBaUIsa0JBQWtCO0FBQ3ZDLE1BQUksd0JBQXdCLFdBQVcsUUFBUSxTQUFTLFNBQVMsd0JBQXdCLFlBQVksUUFBUSxZQUFZLFNBQVMsU0FBUyxRQUFRLDJCQUEyQixRQUFRLDBCQUEwQixTQUFTLHdCQUF3QixZQUFZLFFBQVEsWUFBWSxTQUFTLFVBQVUsa0JBQWtCLFFBQVEsWUFBWSxRQUFRLG9CQUFvQixTQUFTLFVBQVUsd0JBQXdCLGdCQUFnQixhQUFhLFFBQVEsMEJBQTBCLFNBQVMsU0FBUyxzQkFBc0IsMkJBQTJCLFFBQVEsVUFBVSxTQUFTLFFBQVFBLGdCQUFlLDJCQUEyQixRQUFRLFVBQVUsU0FBUyxTQUFTLHdCQUF3QkEsZ0JBQWUsWUFBWSxRQUFRLDBCQUEwQixTQUFTLFVBQVUseUJBQXlCLHNCQUFzQixhQUFhLFFBQVEsMkJBQTJCLFNBQVMsU0FBUyx1QkFBdUIsMkJBQTJCLFFBQVEsU0FBUyxTQUFTLE9BQU8sQ0FBQztBQUdqN0IsTUFBSSxFQUFFLHlCQUF5QixLQUFLLHlCQUF5QixJQUFJO0FBQy9ELFVBQU0sSUFBSSxXQUFXLDJEQUEyRDtBQUFBLEVBQ2xGO0FBQ0EsTUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUM7QUFDcEMsc0JBQW9CLGVBQWUsT0FBTyxHQUFHLEdBQUcscUJBQXFCO0FBQ3JFLHNCQUFvQixZQUFZLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDMUMsTUFBSSxrQkFBa0IsZUFBZSxxQkFBcUIsT0FBTztBQUNqRSxNQUFJLHNCQUFzQixJQUFJLEtBQUssQ0FBQztBQUNwQyxzQkFBb0IsZUFBZSxNQUFNLEdBQUcscUJBQXFCO0FBQ2pFLHNCQUFvQixZQUFZLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDMUMsTUFBSSxrQkFBa0IsZUFBZSxxQkFBcUIsT0FBTztBQUNqRSxNQUFJLEtBQUssUUFBUSxLQUFLLGdCQUFnQixRQUFRLEdBQUc7QUFDL0MsV0FBTyxPQUFPO0FBQUEsRUFDaEIsV0FBVyxLQUFLLFFBQVEsS0FBSyxnQkFBZ0IsUUFBUSxHQUFHO0FBQ3RELFdBQU87QUFBQSxFQUNULE9BQU87QUFDTCxXQUFPLE9BQU87QUFBQSxFQUNoQjtBQUNGOzs7QUMzQmUsU0FBUixtQkFBb0MsV0FBVyxTQUFTO0FBQzdELE1BQUksTUFBTSxPQUFPLE9BQU8sdUJBQXVCLGlCQUFpQix1QkFBdUIsdUJBQXVCO0FBQzlHLGVBQWEsR0FBRyxTQUFTO0FBQ3pCLE1BQUlDLGtCQUFpQixrQkFBa0I7QUFDdkMsTUFBSSx3QkFBd0IsV0FBVyxRQUFRLFNBQVMsU0FBUyx3QkFBd0IsWUFBWSxRQUFRLFlBQVksU0FBUyxTQUFTLFFBQVEsMkJBQTJCLFFBQVEsMEJBQTBCLFNBQVMsd0JBQXdCLFlBQVksUUFBUSxZQUFZLFNBQVMsVUFBVSxrQkFBa0IsUUFBUSxZQUFZLFFBQVEsb0JBQW9CLFNBQVMsVUFBVSx3QkFBd0IsZ0JBQWdCLGFBQWEsUUFBUSwwQkFBMEIsU0FBUyxTQUFTLHNCQUFzQiwyQkFBMkIsUUFBUSxVQUFVLFNBQVMsUUFBUUEsZ0JBQWUsMkJBQTJCLFFBQVEsVUFBVSxTQUFTLFNBQVMsd0JBQXdCQSxnQkFBZSxZQUFZLFFBQVEsMEJBQTBCLFNBQVMsVUFBVSx5QkFBeUIsc0JBQXNCLGFBQWEsUUFBUSwyQkFBMkIsU0FBUyxTQUFTLHVCQUF1QiwyQkFBMkIsUUFBUSxTQUFTLFNBQVMsT0FBTyxDQUFDO0FBQ2o3QixNQUFJLE9BQU8sZUFBZSxXQUFXLE9BQU87QUFDNUMsTUFBSSxZQUFZLElBQUksS0FBSyxDQUFDO0FBQzFCLFlBQVUsZUFBZSxNQUFNLEdBQUcscUJBQXFCO0FBQ3ZELFlBQVUsWUFBWSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQUksT0FBTyxlQUFlLFdBQVcsT0FBTztBQUM1QyxTQUFPO0FBQ1Q7OztBQ1pBLElBQUlDLHdCQUF1QjtBQUNaLFNBQVIsV0FBNEIsV0FBVyxTQUFTO0FBQ3JELGVBQWEsR0FBRyxTQUFTO0FBQ3pCLE1BQUksT0FBTyxPQUFPLFNBQVM7QUFDM0IsTUFBSSxPQUFPLGVBQWUsTUFBTSxPQUFPLEVBQUUsUUFBUSxJQUFJLG1CQUFtQixNQUFNLE9BQU8sRUFBRSxRQUFRO0FBSy9GLFNBQU8sS0FBSyxNQUFNLE9BQU9BLHFCQUFvQixJQUFJO0FBQ25EOzs7QUNkZSxTQUFSLGdCQUFpQyxRQUFRLGNBQWM7QUFDNUQsTUFBSSxPQUFPLFNBQVMsSUFBSSxNQUFNO0FBQzlCLE1BQUksU0FBUyxLQUFLLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDdkMsU0FBTyxPQUFPLFNBQVMsY0FBYztBQUNuQyxhQUFTLE1BQU07QUFBQSxFQUNqQjtBQUNBLFNBQU8sT0FBTztBQUNoQjs7O0FDTUEsSUFBSSxhQUFhO0FBQUE7QUFBQSxFQUVmLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBTztBQVV6QixRQUFJLGFBQWEsS0FBSyxlQUFlO0FBRXJDLFFBQUksT0FBTyxhQUFhLElBQUksYUFBYSxJQUFJO0FBQzdDLFdBQU8sZ0JBQWdCLFVBQVUsT0FBTyxPQUFPLE1BQU0sTUFBTSxNQUFNLE1BQU07QUFBQSxFQUN6RTtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU87QUFDekIsUUFBSSxRQUFRLEtBQUssWUFBWTtBQUM3QixXQUFPLFVBQVUsTUFBTSxPQUFPLFFBQVEsQ0FBQyxJQUFJLGdCQUFnQixRQUFRLEdBQUcsQ0FBQztBQUFBLEVBQ3pFO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBTztBQUN6QixXQUFPLGdCQUFnQixLQUFLLFdBQVcsR0FBRyxNQUFNLE1BQU07QUFBQSxFQUN4RDtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU87QUFDekIsUUFBSSxxQkFBcUIsS0FBSyxZQUFZLElBQUksTUFBTSxJQUFJLE9BQU87QUFDL0QsWUFBUSxPQUFPO0FBQUEsTUFDYixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBTyxtQkFBbUIsWUFBWTtBQUFBLE1BQ3hDLEtBQUs7QUFDSCxlQUFPO0FBQUEsTUFDVCxLQUFLO0FBQ0gsZUFBTyxtQkFBbUIsQ0FBQztBQUFBLE1BQzdCLEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBTyx1QkFBdUIsT0FBTyxTQUFTO0FBQUEsSUFDbEQ7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBTztBQUN6QixXQUFPLGdCQUFnQixLQUFLLFlBQVksSUFBSSxNQUFNLElBQUksTUFBTSxNQUFNO0FBQUEsRUFDcEU7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPO0FBQ3pCLFdBQU8sZ0JBQWdCLEtBQUssWUFBWSxHQUFHLE1BQU0sTUFBTTtBQUFBLEVBQ3pEO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBTztBQUN6QixXQUFPLGdCQUFnQixLQUFLLGNBQWMsR0FBRyxNQUFNLE1BQU07QUFBQSxFQUMzRDtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU87QUFDekIsV0FBTyxnQkFBZ0IsS0FBSyxjQUFjLEdBQUcsTUFBTSxNQUFNO0FBQUEsRUFDM0Q7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPO0FBQ3pCLFFBQUksaUJBQWlCLE1BQU07QUFDM0IsUUFBSSxlQUFlLEtBQUssbUJBQW1CO0FBQzNDLFFBQUksb0JBQW9CLEtBQUssTUFBTSxlQUFlLEtBQUssSUFBSSxJQUFJLGlCQUFpQixDQUFDLENBQUM7QUFDbEYsV0FBTyxnQkFBZ0IsbUJBQW1CLE1BQU0sTUFBTTtBQUFBLEVBQ3hEO0FBQ0Y7QUFDQSxJQUFPLDBCQUFROzs7QUN4RWYsSUFBSSxnQkFBZ0I7QUFBQSxFQUNsQixJQUFJO0FBQUEsRUFDSixJQUFJO0FBQUEsRUFDSixVQUFVO0FBQUEsRUFDVixNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQ1Q7QUErQ0EsSUFBSUMsY0FBYTtBQUFBO0FBQUEsRUFFZixHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU9DLFdBQVU7QUFDbkMsUUFBSSxNQUFNLEtBQUssZUFBZSxJQUFJLElBQUksSUFBSTtBQUMxQyxZQUFRLE9BQU87QUFBQSxNQUViLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPQSxVQUFTLElBQUksS0FBSztBQUFBLFVBQ3ZCLE9BQU87QUFBQSxRQUNULENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLElBQUksS0FBSztBQUFBLFVBQ3ZCLE9BQU87QUFBQSxRQUNULENBQUM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT0EsVUFBUyxJQUFJLEtBQUs7QUFBQSxVQUN2QixPQUFPO0FBQUEsUUFDVCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTQyxHQUFFLE1BQU0sT0FBT0QsV0FBVTtBQUVuQyxRQUFJLFVBQVUsTUFBTTtBQUNsQixVQUFJLGFBQWEsS0FBSyxlQUFlO0FBRXJDLFVBQUksT0FBTyxhQUFhLElBQUksYUFBYSxJQUFJO0FBQzdDLGFBQU9BLFVBQVMsY0FBYyxNQUFNO0FBQUEsUUFDbEMsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBLElBQ0g7QUFDQSxXQUFPLHdCQUFnQixFQUFFLE1BQU0sS0FBSztBQUFBLEVBQ3RDO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBT0EsV0FBVSxTQUFTO0FBQzVDLFFBQUksaUJBQWlCLGVBQWUsTUFBTSxPQUFPO0FBRWpELFFBQUksV0FBVyxpQkFBaUIsSUFBSSxpQkFBaUIsSUFBSTtBQUd6RCxRQUFJLFVBQVUsTUFBTTtBQUNsQixVQUFJLGVBQWUsV0FBVztBQUM5QixhQUFPLGdCQUFnQixjQUFjLENBQUM7QUFBQSxJQUN4QztBQUdBLFFBQUksVUFBVSxNQUFNO0FBQ2xCLGFBQU9BLFVBQVMsY0FBYyxVQUFVO0FBQUEsUUFDdEMsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBLElBQ0g7QUFHQSxXQUFPLGdCQUFnQixVQUFVLE1BQU0sTUFBTTtBQUFBLEVBQy9DO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBTztBQUN6QixRQUFJLGNBQWMsa0JBQWtCLElBQUk7QUFHeEMsV0FBTyxnQkFBZ0IsYUFBYSxNQUFNLE1BQU07QUFBQSxFQUNsRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPO0FBQ3pCLFFBQUksT0FBTyxLQUFLLGVBQWU7QUFDL0IsV0FBTyxnQkFBZ0IsTUFBTSxNQUFNLE1BQU07QUFBQSxFQUMzQztBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU9BLFdBQVU7QUFDbkMsUUFBSSxVQUFVLEtBQUssTUFBTSxLQUFLLFlBQVksSUFBSSxLQUFLLENBQUM7QUFDcEQsWUFBUSxPQUFPO0FBQUEsTUFFYixLQUFLO0FBQ0gsZUFBTyxPQUFPLE9BQU87QUFBQSxNQUV2QixLQUFLO0FBQ0gsZUFBTyxnQkFBZ0IsU0FBUyxDQUFDO0FBQUEsTUFFbkMsS0FBSztBQUNILGVBQU9BLFVBQVMsY0FBYyxTQUFTO0FBQUEsVUFDckMsTUFBTTtBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9BLFVBQVMsUUFBUSxTQUFTO0FBQUEsVUFDL0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9BLFVBQVMsUUFBUSxTQUFTO0FBQUEsVUFDL0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPQSxVQUFTLFFBQVEsU0FBUztBQUFBLFVBQy9CLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxJQUNMO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU9BLFdBQVU7QUFDbkMsUUFBSSxVQUFVLEtBQUssTUFBTSxLQUFLLFlBQVksSUFBSSxLQUFLLENBQUM7QUFDcEQsWUFBUSxPQUFPO0FBQUEsTUFFYixLQUFLO0FBQ0gsZUFBTyxPQUFPLE9BQU87QUFBQSxNQUV2QixLQUFLO0FBQ0gsZUFBTyxnQkFBZ0IsU0FBUyxDQUFDO0FBQUEsTUFFbkMsS0FBSztBQUNILGVBQU9BLFVBQVMsY0FBYyxTQUFTO0FBQUEsVUFDckMsTUFBTTtBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9BLFVBQVMsUUFBUSxTQUFTO0FBQUEsVUFDL0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9BLFVBQVMsUUFBUSxTQUFTO0FBQUEsVUFDL0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPQSxVQUFTLFFBQVEsU0FBUztBQUFBLFVBQy9CLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxJQUNMO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVNFLEdBQUUsTUFBTSxPQUFPRixXQUFVO0FBQ25DLFFBQUksUUFBUSxLQUFLLFlBQVk7QUFDN0IsWUFBUSxPQUFPO0FBQUEsTUFDYixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBTyx3QkFBZ0IsRUFBRSxNQUFNLEtBQUs7QUFBQSxNQUV0QyxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxjQUFjLFFBQVEsR0FBRztBQUFBLFVBQ3ZDLE1BQU07QUFBQSxRQUNSLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLE1BQU0sT0FBTztBQUFBLFVBQzNCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLE1BQU0sT0FBTztBQUFBLFVBQzNCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT0EsVUFBUyxNQUFNLE9BQU87QUFBQSxVQUMzQixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVO0FBQ25DLFFBQUksUUFBUSxLQUFLLFlBQVk7QUFDN0IsWUFBUSxPQUFPO0FBQUEsTUFFYixLQUFLO0FBQ0gsZUFBTyxPQUFPLFFBQVEsQ0FBQztBQUFBLE1BRXpCLEtBQUs7QUFDSCxlQUFPLGdCQUFnQixRQUFRLEdBQUcsQ0FBQztBQUFBLE1BRXJDLEtBQUs7QUFDSCxlQUFPQSxVQUFTLGNBQWMsUUFBUSxHQUFHO0FBQUEsVUFDdkMsTUFBTTtBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9BLFVBQVMsTUFBTSxPQUFPO0FBQUEsVUFDM0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9BLFVBQVMsTUFBTSxPQUFPO0FBQUEsVUFDM0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPQSxVQUFTLE1BQU0sT0FBTztBQUFBLFVBQzNCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxJQUNMO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU9BLFdBQVUsU0FBUztBQUM1QyxRQUFJLE9BQU8sV0FBVyxNQUFNLE9BQU87QUFDbkMsUUFBSSxVQUFVLE1BQU07QUFDbEIsYUFBT0EsVUFBUyxjQUFjLE1BQU07QUFBQSxRQUNsQyxNQUFNO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDSDtBQUNBLFdBQU8sZ0JBQWdCLE1BQU0sTUFBTSxNQUFNO0FBQUEsRUFDM0M7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVO0FBQ25DLFFBQUksVUFBVSxjQUFjLElBQUk7QUFDaEMsUUFBSSxVQUFVLE1BQU07QUFDbEIsYUFBT0EsVUFBUyxjQUFjLFNBQVM7QUFBQSxRQUNyQyxNQUFNO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDSDtBQUNBLFdBQU8sZ0JBQWdCLFNBQVMsTUFBTSxNQUFNO0FBQUEsRUFDOUM7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTRyxHQUFFLE1BQU0sT0FBT0gsV0FBVTtBQUNuQyxRQUFJLFVBQVUsTUFBTTtBQUNsQixhQUFPQSxVQUFTLGNBQWMsS0FBSyxXQUFXLEdBQUc7QUFBQSxRQUMvQyxNQUFNO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDSDtBQUNBLFdBQU8sd0JBQWdCLEVBQUUsTUFBTSxLQUFLO0FBQUEsRUFDdEM7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVO0FBQ25DLFFBQUksWUFBWSxnQkFBZ0IsSUFBSTtBQUNwQyxRQUFJLFVBQVUsTUFBTTtBQUNsQixhQUFPQSxVQUFTLGNBQWMsV0FBVztBQUFBLFFBQ3ZDLE1BQU07QUFBQSxNQUNSLENBQUM7QUFBQSxJQUNIO0FBQ0EsV0FBTyxnQkFBZ0IsV0FBVyxNQUFNLE1BQU07QUFBQSxFQUNoRDtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU9BLFdBQVU7QUFDbkMsUUFBSSxZQUFZLEtBQUssVUFBVTtBQUMvQixZQUFRLE9BQU87QUFBQSxNQUViLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPQSxVQUFTLElBQUksV0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLElBQUksV0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLElBQUksV0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVLFNBQVM7QUFDNUMsUUFBSSxZQUFZLEtBQUssVUFBVTtBQUMvQixRQUFJLGtCQUFrQixZQUFZLFFBQVEsZUFBZSxLQUFLLEtBQUs7QUFDbkUsWUFBUSxPQUFPO0FBQUEsTUFFYixLQUFLO0FBQ0gsZUFBTyxPQUFPLGNBQWM7QUFBQSxNQUU5QixLQUFLO0FBQ0gsZUFBTyxnQkFBZ0IsZ0JBQWdCLENBQUM7QUFBQSxNQUUxQyxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxjQUFjLGdCQUFnQjtBQUFBLFVBQzVDLE1BQU07QUFBQSxRQUNSLENBQUM7QUFBQSxNQUNILEtBQUs7QUFDSCxlQUFPQSxVQUFTLElBQUksV0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLElBQUksV0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPQSxVQUFTLElBQUksV0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVLFNBQVM7QUFDNUMsUUFBSSxZQUFZLEtBQUssVUFBVTtBQUMvQixRQUFJLGtCQUFrQixZQUFZLFFBQVEsZUFBZSxLQUFLLEtBQUs7QUFDbkUsWUFBUSxPQUFPO0FBQUEsTUFFYixLQUFLO0FBQ0gsZUFBTyxPQUFPLGNBQWM7QUFBQSxNQUU5QixLQUFLO0FBQ0gsZUFBTyxnQkFBZ0IsZ0JBQWdCLE1BQU0sTUFBTTtBQUFBLE1BRXJELEtBQUs7QUFDSCxlQUFPQSxVQUFTLGNBQWMsZ0JBQWdCO0FBQUEsVUFDNUMsTUFBTTtBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BQ0gsS0FBSztBQUNILGVBQU9BLFVBQVMsSUFBSSxXQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9BLFVBQVMsSUFBSSxXQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9BLFVBQVMsSUFBSSxXQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPQSxVQUFTLElBQUksV0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxJQUNMO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU9BLFdBQVU7QUFDbkMsUUFBSSxZQUFZLEtBQUssVUFBVTtBQUMvQixRQUFJLGVBQWUsY0FBYyxJQUFJLElBQUk7QUFDekMsWUFBUSxPQUFPO0FBQUEsTUFFYixLQUFLO0FBQ0gsZUFBTyxPQUFPLFlBQVk7QUFBQSxNQUU1QixLQUFLO0FBQ0gsZUFBTyxnQkFBZ0IsY0FBYyxNQUFNLE1BQU07QUFBQSxNQUVuRCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxjQUFjLGNBQWM7QUFBQSxVQUMxQyxNQUFNO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxJQUFJLFdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU9BLFVBQVMsSUFBSSxXQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBU0ksR0FBRSxNQUFNLE9BQU9KLFdBQVU7QUFDbkMsUUFBSSxRQUFRLEtBQUssWUFBWTtBQUM3QixRQUFJLHFCQUFxQixRQUFRLE1BQU0sSUFBSSxPQUFPO0FBQ2xELFlBQVEsT0FBTztBQUFBLE1BQ2IsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILGVBQU9BLFVBQVMsVUFBVSxvQkFBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxVQUFVLG9CQUFvQjtBQUFBLFVBQzVDLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUMsRUFBRSxZQUFZO0FBQUEsTUFDakIsS0FBSztBQUNILGVBQU9BLFVBQVMsVUFBVSxvQkFBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU9BLFVBQVMsVUFBVSxvQkFBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVO0FBQ25DLFFBQUksUUFBUSxLQUFLLFlBQVk7QUFDN0IsUUFBSTtBQUNKLFFBQUksVUFBVSxJQUFJO0FBQ2hCLDJCQUFxQixjQUFjO0FBQUEsSUFDckMsV0FBVyxVQUFVLEdBQUc7QUFDdEIsMkJBQXFCLGNBQWM7QUFBQSxJQUNyQyxPQUFPO0FBQ0wsMkJBQXFCLFFBQVEsTUFBTSxJQUFJLE9BQU87QUFBQSxJQUNoRDtBQUNBLFlBQVEsT0FBTztBQUFBLE1BQ2IsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILGVBQU9BLFVBQVMsVUFBVSxvQkFBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSCxLQUFLO0FBQ0gsZUFBT0EsVUFBUyxVQUFVLG9CQUFvQjtBQUFBLFVBQzVDLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLENBQUMsRUFBRSxZQUFZO0FBQUEsTUFDakIsS0FBSztBQUNILGVBQU9BLFVBQVMsVUFBVSxvQkFBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU9BLFVBQVMsVUFBVSxvQkFBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVO0FBQ25DLFFBQUksUUFBUSxLQUFLLFlBQVk7QUFDN0IsUUFBSTtBQUNKLFFBQUksU0FBUyxJQUFJO0FBQ2YsMkJBQXFCLGNBQWM7QUFBQSxJQUNyQyxXQUFXLFNBQVMsSUFBSTtBQUN0QiwyQkFBcUIsY0FBYztBQUFBLElBQ3JDLFdBQVcsU0FBUyxHQUFHO0FBQ3JCLDJCQUFxQixjQUFjO0FBQUEsSUFDckMsT0FBTztBQUNMLDJCQUFxQixjQUFjO0FBQUEsSUFDckM7QUFDQSxZQUFRLE9BQU87QUFBQSxNQUNiLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPQSxVQUFTLFVBQVUsb0JBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BQ0gsS0FBSztBQUNILGVBQU9BLFVBQVMsVUFBVSxvQkFBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU9BLFVBQVMsVUFBVSxvQkFBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTSyxHQUFFLE1BQU0sT0FBT0wsV0FBVTtBQUNuQyxRQUFJLFVBQVUsTUFBTTtBQUNsQixVQUFJLFFBQVEsS0FBSyxZQUFZLElBQUk7QUFDakMsVUFBSSxVQUFVO0FBQUcsZ0JBQVE7QUFDekIsYUFBT0EsVUFBUyxjQUFjLE9BQU87QUFBQSxRQUNuQyxNQUFNO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDSDtBQUNBLFdBQU8sd0JBQWdCLEVBQUUsTUFBTSxLQUFLO0FBQUEsRUFDdEM7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTTSxHQUFFLE1BQU0sT0FBT04sV0FBVTtBQUNuQyxRQUFJLFVBQVUsTUFBTTtBQUNsQixhQUFPQSxVQUFTLGNBQWMsS0FBSyxZQUFZLEdBQUc7QUFBQSxRQUNoRCxNQUFNO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDSDtBQUNBLFdBQU8sd0JBQWdCLEVBQUUsTUFBTSxLQUFLO0FBQUEsRUFDdEM7QUFBQTtBQUFBLEVBRUEsR0FBRyxTQUFTLEVBQUUsTUFBTSxPQUFPQSxXQUFVO0FBQ25DLFFBQUksUUFBUSxLQUFLLFlBQVksSUFBSTtBQUNqQyxRQUFJLFVBQVUsTUFBTTtBQUNsQixhQUFPQSxVQUFTLGNBQWMsT0FBTztBQUFBLFFBQ25DLE1BQU07QUFBQSxNQUNSLENBQUM7QUFBQSxJQUNIO0FBQ0EsV0FBTyxnQkFBZ0IsT0FBTyxNQUFNLE1BQU07QUFBQSxFQUM1QztBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU9BLFdBQVU7QUFDbkMsUUFBSSxRQUFRLEtBQUssWUFBWTtBQUM3QixRQUFJLFVBQVU7QUFBRyxjQUFRO0FBQ3pCLFFBQUksVUFBVSxNQUFNO0FBQ2xCLGFBQU9BLFVBQVMsY0FBYyxPQUFPO0FBQUEsUUFDbkMsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBLElBQ0g7QUFDQSxXQUFPLGdCQUFnQixPQUFPLE1BQU0sTUFBTTtBQUFBLEVBQzVDO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBU08sR0FBRSxNQUFNLE9BQU9QLFdBQVU7QUFDbkMsUUFBSSxVQUFVLE1BQU07QUFDbEIsYUFBT0EsVUFBUyxjQUFjLEtBQUssY0FBYyxHQUFHO0FBQUEsUUFDbEQsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBLElBQ0g7QUFDQSxXQUFPLHdCQUFnQixFQUFFLE1BQU0sS0FBSztBQUFBLEVBQ3RDO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBU1EsR0FBRSxNQUFNLE9BQU9SLFdBQVU7QUFDbkMsUUFBSSxVQUFVLE1BQU07QUFDbEIsYUFBT0EsVUFBUyxjQUFjLEtBQUssY0FBYyxHQUFHO0FBQUEsUUFDbEQsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBLElBQ0g7QUFDQSxXQUFPLHdCQUFnQixFQUFFLE1BQU0sS0FBSztBQUFBLEVBQ3RDO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBU1MsR0FBRSxNQUFNLE9BQU87QUFDekIsV0FBTyx3QkFBZ0IsRUFBRSxNQUFNLEtBQUs7QUFBQSxFQUN0QztBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU8sV0FBVyxTQUFTO0FBQzdDLFFBQUksZUFBZSxRQUFRLGlCQUFpQjtBQUM1QyxRQUFJLGlCQUFpQixhQUFhLGtCQUFrQjtBQUNwRCxRQUFJLG1CQUFtQixHQUFHO0FBQ3hCLGFBQU87QUFBQSxJQUNUO0FBQ0EsWUFBUSxPQUFPO0FBQUEsTUFFYixLQUFLO0FBQ0gsZUFBTyxrQ0FBa0MsY0FBYztBQUFBLE1BS3pELEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFFSCxlQUFPLGVBQWUsY0FBYztBQUFBLE1BS3RDLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBTyxlQUFlLGdCQUFnQixHQUFHO0FBQUEsSUFDN0M7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUVBLEdBQUcsU0FBUyxFQUFFLE1BQU0sT0FBTyxXQUFXLFNBQVM7QUFDN0MsUUFBSSxlQUFlLFFBQVEsaUJBQWlCO0FBQzVDLFFBQUksaUJBQWlCLGFBQWEsa0JBQWtCO0FBQ3BELFlBQVEsT0FBTztBQUFBLE1BRWIsS0FBSztBQUNILGVBQU8sa0NBQWtDLGNBQWM7QUFBQSxNQUt6RCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBRUgsZUFBTyxlQUFlLGNBQWM7QUFBQSxNQUt0QyxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU8sZUFBZSxnQkFBZ0IsR0FBRztBQUFBLElBQzdDO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU8sV0FBVyxTQUFTO0FBQzdDLFFBQUksZUFBZSxRQUFRLGlCQUFpQjtBQUM1QyxRQUFJLGlCQUFpQixhQUFhLGtCQUFrQjtBQUNwRCxZQUFRLE9BQU87QUFBQSxNQUViLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPLFFBQVEsb0JBQW9CLGdCQUFnQixHQUFHO0FBQUEsTUFFeEQsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPLFFBQVEsZUFBZSxnQkFBZ0IsR0FBRztBQUFBLElBQ3JEO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU8sV0FBVyxTQUFTO0FBQzdDLFFBQUksZUFBZSxRQUFRLGlCQUFpQjtBQUM1QyxRQUFJLGlCQUFpQixhQUFhLGtCQUFrQjtBQUNwRCxZQUFRLE9BQU87QUFBQSxNQUViLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPLFFBQVEsb0JBQW9CLGdCQUFnQixHQUFHO0FBQUEsTUFFeEQsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPLFFBQVEsZUFBZSxnQkFBZ0IsR0FBRztBQUFBLElBQ3JEO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU8sV0FBVyxTQUFTO0FBQzdDLFFBQUksZUFBZSxRQUFRLGlCQUFpQjtBQUM1QyxRQUFJLFlBQVksS0FBSyxNQUFNLGFBQWEsUUFBUSxJQUFJLEdBQUk7QUFDeEQsV0FBTyxnQkFBZ0IsV0FBVyxNQUFNLE1BQU07QUFBQSxFQUNoRDtBQUFBO0FBQUEsRUFFQSxHQUFHLFNBQVMsRUFBRSxNQUFNLE9BQU8sV0FBVyxTQUFTO0FBQzdDLFFBQUksZUFBZSxRQUFRLGlCQUFpQjtBQUM1QyxRQUFJLFlBQVksYUFBYSxRQUFRO0FBQ3JDLFdBQU8sZ0JBQWdCLFdBQVcsTUFBTSxNQUFNO0FBQUEsRUFDaEQ7QUFDRjtBQUNBLFNBQVMsb0JBQW9CLFFBQVEsZ0JBQWdCO0FBQ25ELE1BQUksT0FBTyxTQUFTLElBQUksTUFBTTtBQUM5QixNQUFJLFlBQVksS0FBSyxJQUFJLE1BQU07QUFDL0IsTUFBSSxRQUFRLEtBQUssTUFBTSxZQUFZLEVBQUU7QUFDckMsTUFBSSxVQUFVLFlBQVk7QUFDMUIsTUFBSSxZQUFZLEdBQUc7QUFDakIsV0FBTyxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzVCO0FBQ0EsTUFBSSxZQUFZLGtCQUFrQjtBQUNsQyxTQUFPLE9BQU8sT0FBTyxLQUFLLElBQUksWUFBWSxnQkFBZ0IsU0FBUyxDQUFDO0FBQ3RFO0FBQ0EsU0FBUyxrQ0FBa0MsUUFBUSxnQkFBZ0I7QUFDakUsTUFBSSxTQUFTLE9BQU8sR0FBRztBQUNyQixRQUFJLE9BQU8sU0FBUyxJQUFJLE1BQU07QUFDOUIsV0FBTyxPQUFPLGdCQUFnQixLQUFLLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQztBQUFBLEVBQ3hEO0FBQ0EsU0FBTyxlQUFlLFFBQVEsY0FBYztBQUM5QztBQUNBLFNBQVMsZUFBZSxRQUFRLGdCQUFnQjtBQUM5QyxNQUFJLFlBQVksa0JBQWtCO0FBQ2xDLE1BQUksT0FBTyxTQUFTLElBQUksTUFBTTtBQUM5QixNQUFJLFlBQVksS0FBSyxJQUFJLE1BQU07QUFDL0IsTUFBSSxRQUFRLGdCQUFnQixLQUFLLE1BQU0sWUFBWSxFQUFFLEdBQUcsQ0FBQztBQUN6RCxNQUFJLFVBQVUsZ0JBQWdCLFlBQVksSUFBSSxDQUFDO0FBQy9DLFNBQU8sT0FBTyxRQUFRLFlBQVk7QUFDcEM7QUFDQSxJQUFPLHFCQUFRVjs7O0FDbndCZixJQUFJLG9CQUFvQixTQUFTVyxtQkFBa0IsU0FBU0MsYUFBWTtBQUN0RSxVQUFRLFNBQVM7QUFBQSxJQUNmLEtBQUs7QUFDSCxhQUFPQSxZQUFXLEtBQUs7QUFBQSxRQUNyQixPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSCxLQUFLO0FBQ0gsYUFBT0EsWUFBVyxLQUFLO0FBQUEsUUFDckIsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0gsS0FBSztBQUNILGFBQU9BLFlBQVcsS0FBSztBQUFBLFFBQ3JCLE9BQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNILEtBQUs7QUFBQSxJQUNMO0FBQ0UsYUFBT0EsWUFBVyxLQUFLO0FBQUEsUUFDckIsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLEVBQ0w7QUFDRjtBQUNBLElBQUksb0JBQW9CLFNBQVNDLG1CQUFrQixTQUFTRCxhQUFZO0FBQ3RFLFVBQVEsU0FBUztBQUFBLElBQ2YsS0FBSztBQUNILGFBQU9BLFlBQVcsS0FBSztBQUFBLFFBQ3JCLE9BQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNILEtBQUs7QUFDSCxhQUFPQSxZQUFXLEtBQUs7QUFBQSxRQUNyQixPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSCxLQUFLO0FBQ0gsYUFBT0EsWUFBVyxLQUFLO0FBQUEsUUFDckIsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0gsS0FBSztBQUFBLElBQ0w7QUFDRSxhQUFPQSxZQUFXLEtBQUs7QUFBQSxRQUNyQixPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsRUFDTDtBQUNGO0FBQ0EsSUFBSSx3QkFBd0IsU0FBU0UsdUJBQXNCLFNBQVNGLGFBQVk7QUFDOUUsTUFBSSxjQUFjLFFBQVEsTUFBTSxXQUFXLEtBQUssQ0FBQztBQUNqRCxNQUFJLGNBQWMsWUFBWSxDQUFDO0FBQy9CLE1BQUksY0FBYyxZQUFZLENBQUM7QUFDL0IsTUFBSSxDQUFDLGFBQWE7QUFDaEIsV0FBTyxrQkFBa0IsU0FBU0EsV0FBVTtBQUFBLEVBQzlDO0FBQ0EsTUFBSTtBQUNKLFVBQVEsYUFBYTtBQUFBLElBQ25CLEtBQUs7QUFDSCx1QkFBaUJBLFlBQVcsU0FBUztBQUFBLFFBQ25DLE9BQU87QUFBQSxNQUNULENBQUM7QUFDRDtBQUFBLElBQ0YsS0FBSztBQUNILHVCQUFpQkEsWUFBVyxTQUFTO0FBQUEsUUFDbkMsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUNEO0FBQUEsSUFDRixLQUFLO0FBQ0gsdUJBQWlCQSxZQUFXLFNBQVM7QUFBQSxRQUNuQyxPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQ0Q7QUFBQSxJQUNGLEtBQUs7QUFBQSxJQUNMO0FBQ0UsdUJBQWlCQSxZQUFXLFNBQVM7QUFBQSxRQUNuQyxPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQ0Q7QUFBQSxFQUNKO0FBQ0EsU0FBTyxlQUFlLFFBQVEsWUFBWSxrQkFBa0IsYUFBYUEsV0FBVSxDQUFDLEVBQUUsUUFBUSxZQUFZLGtCQUFrQixhQUFhQSxXQUFVLENBQUM7QUFDdEo7QUFDQSxJQUFJLGlCQUFpQjtBQUFBLEVBQ25CLEdBQUc7QUFBQSxFQUNILEdBQUc7QUFDTDtBQUNBLElBQU8seUJBQVE7OztBQ3BFQSxTQUFSLGdDQUFpRCxNQUFNO0FBQzVELE1BQUksVUFBVSxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssWUFBWSxHQUFHLEtBQUssU0FBUyxHQUFHLEtBQUssUUFBUSxHQUFHLEtBQUssU0FBUyxHQUFHLEtBQUssV0FBVyxHQUFHLEtBQUssV0FBVyxHQUFHLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztBQUNuSyxVQUFRLGVBQWUsS0FBSyxZQUFZLENBQUM7QUFDekMsU0FBTyxLQUFLLFFBQVEsSUFBSSxRQUFRLFFBQVE7QUFDMUM7OztBQ2ZBLElBQUksMkJBQTJCLENBQUMsS0FBSyxJQUFJO0FBQ3pDLElBQUksMEJBQTBCLENBQUMsTUFBTSxNQUFNO0FBQ3BDLFNBQVMsMEJBQTBCLE9BQU87QUFDL0MsU0FBTyx5QkFBeUIsUUFBUSxLQUFLLE1BQU07QUFDckQ7QUFDTyxTQUFTLHlCQUF5QixPQUFPO0FBQzlDLFNBQU8sd0JBQXdCLFFBQVEsS0FBSyxNQUFNO0FBQ3BEO0FBQ08sU0FBUyxvQkFBb0IsT0FBT0csU0FBUSxPQUFPO0FBQ3hELE1BQUksVUFBVSxRQUFRO0FBQ3BCLFVBQU0sSUFBSSxXQUFXLHFDQUFxQyxPQUFPQSxTQUFRLHdDQUF3QyxFQUFFLE9BQU8sT0FBTyxnRkFBZ0YsQ0FBQztBQUFBLEVBQ3BOLFdBQVcsVUFBVSxNQUFNO0FBQ3pCLFVBQU0sSUFBSSxXQUFXLGlDQUFpQyxPQUFPQSxTQUFRLHdDQUF3QyxFQUFFLE9BQU8sT0FBTyxnRkFBZ0YsQ0FBQztBQUFBLEVBQ2hOLFdBQVcsVUFBVSxLQUFLO0FBQ3hCLFVBQU0sSUFBSSxXQUFXLCtCQUErQixPQUFPQSxTQUFRLG9EQUFvRCxFQUFFLE9BQU8sT0FBTyxnRkFBZ0YsQ0FBQztBQUFBLEVBQzFOLFdBQVcsVUFBVSxNQUFNO0FBQ3pCLFVBQU0sSUFBSSxXQUFXLGlDQUFpQyxPQUFPQSxTQUFRLG9EQUFvRCxFQUFFLE9BQU8sT0FBTyxnRkFBZ0YsQ0FBQztBQUFBLEVBQzVOO0FBQ0Y7OztBQ2xCQSxJQUFJLHVCQUF1QjtBQUFBLEVBQ3pCLGtCQUFrQjtBQUFBLElBQ2hCLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsSUFDaEIsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxhQUFhO0FBQUEsSUFDWCxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxhQUFhO0FBQUEsSUFDWCxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLGNBQWM7QUFBQSxJQUNaLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1gsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNOLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxZQUFZO0FBQUEsSUFDVixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsY0FBYztBQUFBLElBQ1osS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUNBLElBQUksaUJBQWlCLFNBQVNDLGdCQUFlLE9BQU8sT0FBTyxTQUFTO0FBQ2xFLE1BQUk7QUFDSixNQUFJLGFBQWEscUJBQXFCLEtBQUs7QUFDM0MsTUFBSSxPQUFPLGVBQWUsVUFBVTtBQUNsQyxhQUFTO0FBQUEsRUFDWCxXQUFXLFVBQVUsR0FBRztBQUN0QixhQUFTLFdBQVc7QUFBQSxFQUN0QixPQUFPO0FBQ0wsYUFBUyxXQUFXLE1BQU0sUUFBUSxhQUFhLE1BQU0sU0FBUyxDQUFDO0FBQUEsRUFDakU7QUFDQSxNQUFJLFlBQVksUUFBUSxZQUFZLFVBQVUsUUFBUSxXQUFXO0FBQy9ELFFBQUksUUFBUSxjQUFjLFFBQVEsYUFBYSxHQUFHO0FBQ2hELGFBQU8sUUFBUTtBQUFBLElBQ2pCLE9BQU87QUFDTCxhQUFPLFNBQVM7QUFBQSxJQUNsQjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFDQSxJQUFPLHlCQUFROzs7QUNsRkEsU0FBUixrQkFBbUMsTUFBTTtBQUM5QyxTQUFPLFdBQVk7QUFDakIsUUFBSSxVQUFVLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQztBQUVuRixRQUFJLFFBQVEsUUFBUSxRQUFRLE9BQU8sUUFBUSxLQUFLLElBQUksS0FBSztBQUN6RCxRQUFJQyxVQUFTLEtBQUssUUFBUSxLQUFLLEtBQUssS0FBSyxRQUFRLEtBQUssWUFBWTtBQUNsRSxXQUFPQTtBQUFBLEVBQ1Q7QUFDRjs7O0FDUEEsSUFBSSxjQUFjO0FBQUEsRUFDaEIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUNUO0FBQ0EsSUFBSSxjQUFjO0FBQUEsRUFDaEIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUNUO0FBQ0EsSUFBSSxrQkFBa0I7QUFBQSxFQUNwQixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQ1Q7QUFDQSxJQUFJLGFBQWE7QUFBQSxFQUNmLE1BQU0sa0JBQWtCO0FBQUEsSUFDdEIsU0FBUztBQUFBLElBQ1QsY0FBYztBQUFBLEVBQ2hCLENBQUM7QUFBQSxFQUNELE1BQU0sa0JBQWtCO0FBQUEsSUFDdEIsU0FBUztBQUFBLElBQ1QsY0FBYztBQUFBLEVBQ2hCLENBQUM7QUFBQSxFQUNELFVBQVUsa0JBQWtCO0FBQUEsSUFDMUIsU0FBUztBQUFBLElBQ1QsY0FBYztBQUFBLEVBQ2hCLENBQUM7QUFDSDtBQUNBLElBQU8scUJBQVE7OztBQ2pDZixJQUFJLHVCQUF1QjtBQUFBLEVBQ3pCLFVBQVU7QUFBQSxFQUNWLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLE9BQU87QUFDVDtBQUNBLElBQUksaUJBQWlCLFNBQVNDLGdCQUFlLE9BQU8sT0FBTyxXQUFXLFVBQVU7QUFDOUUsU0FBTyxxQkFBcUIsS0FBSztBQUNuQztBQUNBLElBQU8seUJBQVE7OztBQ1hBLFNBQVIsZ0JBQWlDLE1BQU07QUFDNUMsU0FBTyxTQUFVLFlBQVksU0FBUztBQUNwQyxRQUFJLFVBQVUsWUFBWSxRQUFRLFlBQVksVUFBVSxRQUFRLFVBQVUsT0FBTyxRQUFRLE9BQU8sSUFBSTtBQUNwRyxRQUFJO0FBQ0osUUFBSSxZQUFZLGdCQUFnQixLQUFLLGtCQUFrQjtBQUNyRCxVQUFJLGVBQWUsS0FBSywwQkFBMEIsS0FBSztBQUN2RCxVQUFJLFFBQVEsWUFBWSxRQUFRLFlBQVksVUFBVSxRQUFRLFFBQVEsT0FBTyxRQUFRLEtBQUssSUFBSTtBQUM5RixvQkFBYyxLQUFLLGlCQUFpQixLQUFLLEtBQUssS0FBSyxpQkFBaUIsWUFBWTtBQUFBLElBQ2xGLE9BQU87QUFDTCxVQUFJLGdCQUFnQixLQUFLO0FBQ3pCLFVBQUksU0FBUyxZQUFZLFFBQVEsWUFBWSxVQUFVLFFBQVEsUUFBUSxPQUFPLFFBQVEsS0FBSyxJQUFJLEtBQUs7QUFDcEcsb0JBQWMsS0FBSyxPQUFPLE1BQU0sS0FBSyxLQUFLLE9BQU8sYUFBYTtBQUFBLElBQ2hFO0FBQ0EsUUFBSSxRQUFRLEtBQUssbUJBQW1CLEtBQUssaUJBQWlCLFVBQVUsSUFBSTtBQUV4RSxXQUFPLFlBQVksS0FBSztBQUFBLEVBQzFCO0FBQ0Y7OztBQ2hCQSxJQUFJLFlBQVk7QUFBQSxFQUNkLFFBQVEsQ0FBQyxLQUFLLEdBQUc7QUFBQSxFQUNqQixhQUFhLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDeEIsTUFBTSxDQUFDLGlCQUFpQixhQUFhO0FBQ3ZDO0FBQ0EsSUFBSSxnQkFBZ0I7QUFBQSxFQUNsQixRQUFRLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRztBQUFBLEVBQzNCLGFBQWEsQ0FBQyxNQUFNLE1BQU0sTUFBTSxJQUFJO0FBQUEsRUFDcEMsTUFBTSxDQUFDLGVBQWUsZUFBZSxlQUFlLGFBQWE7QUFDbkU7QUFNQSxJQUFJLGNBQWM7QUFBQSxFQUNoQixRQUFRLENBQUMsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQSxFQUNuRSxhQUFhLENBQUMsT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLEtBQUs7QUFBQSxFQUNoRyxNQUFNLENBQUMsV0FBVyxZQUFZLFNBQVMsU0FBUyxPQUFPLFFBQVEsUUFBUSxVQUFVLGFBQWEsV0FBVyxZQUFZLFVBQVU7QUFDakk7QUFDQSxJQUFJLFlBQVk7QUFBQSxFQUNkLFFBQVEsQ0FBQyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHO0FBQUEsRUFDMUMsT0FBTyxDQUFDLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUk7QUFBQSxFQUNoRCxhQUFhLENBQUMsT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzdELE1BQU0sQ0FBQyxVQUFVLFVBQVUsV0FBVyxhQUFhLFlBQVksVUFBVSxVQUFVO0FBQ3JGO0FBQ0EsSUFBSSxrQkFBa0I7QUFBQSxFQUNwQixRQUFRO0FBQUEsSUFDTixJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixVQUFVO0FBQUEsSUFDVixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1gsSUFBSTtBQUFBLElBQ0osSUFBSTtBQUFBLElBQ0osVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxFQUNUO0FBQ0Y7QUFDQSxJQUFJLDRCQUE0QjtBQUFBLEVBQzlCLFFBQVE7QUFBQSxJQUNOLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxhQUFhO0FBQUEsSUFDWCxJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixVQUFVO0FBQUEsSUFDVixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osSUFBSTtBQUFBLElBQ0osSUFBSTtBQUFBLElBQ0osVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUNBLElBQUksZ0JBQWdCLFNBQVNDLGVBQWMsYUFBYSxVQUFVO0FBQ2hFLE1BQUksU0FBUyxPQUFPLFdBQVc7QUFTL0IsTUFBSSxTQUFTLFNBQVM7QUFDdEIsTUFBSSxTQUFTLE1BQU0sU0FBUyxJQUFJO0FBQzlCLFlBQVEsU0FBUyxJQUFJO0FBQUEsTUFDbkIsS0FBSztBQUNILGVBQU8sU0FBUztBQUFBLE1BQ2xCLEtBQUs7QUFDSCxlQUFPLFNBQVM7QUFBQSxNQUNsQixLQUFLO0FBQ0gsZUFBTyxTQUFTO0FBQUEsSUFDcEI7QUFBQSxFQUNGO0FBQ0EsU0FBTyxTQUFTO0FBQ2xCO0FBQ0EsSUFBSSxXQUFXO0FBQUEsRUFDYjtBQUFBLEVBQ0EsS0FBSyxnQkFBZ0I7QUFBQSxJQUNuQixRQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsRUFDaEIsQ0FBQztBQUFBLEVBQ0QsU0FBUyxnQkFBZ0I7QUFBQSxJQUN2QixRQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsSUFDZCxrQkFBa0IsU0FBUyxpQkFBaUIsU0FBUztBQUNuRCxhQUFPLFVBQVU7QUFBQSxJQUNuQjtBQUFBLEVBQ0YsQ0FBQztBQUFBLEVBQ0QsT0FBTyxnQkFBZ0I7QUFBQSxJQUNyQixRQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsRUFDaEIsQ0FBQztBQUFBLEVBQ0QsS0FBSyxnQkFBZ0I7QUFBQSxJQUNuQixRQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsRUFDaEIsQ0FBQztBQUFBLEVBQ0QsV0FBVyxnQkFBZ0I7QUFBQSxJQUN6QixRQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsSUFDZCxrQkFBa0I7QUFBQSxJQUNsQix3QkFBd0I7QUFBQSxFQUMxQixDQUFDO0FBQ0g7QUFDQSxJQUFPLG1CQUFROzs7QUM5SUEsU0FBUixhQUE4QixNQUFNO0FBQ3pDLFNBQU8sU0FBVSxRQUFRO0FBQ3ZCLFFBQUksVUFBVSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDbkYsUUFBSSxRQUFRLFFBQVE7QUFDcEIsUUFBSSxlQUFlLFNBQVMsS0FBSyxjQUFjLEtBQUssS0FBSyxLQUFLLGNBQWMsS0FBSyxpQkFBaUI7QUFDbEcsUUFBSSxjQUFjLE9BQU8sTUFBTSxZQUFZO0FBQzNDLFFBQUksQ0FBQyxhQUFhO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxnQkFBZ0IsWUFBWSxDQUFDO0FBQ2pDLFFBQUksZ0JBQWdCLFNBQVMsS0FBSyxjQUFjLEtBQUssS0FBSyxLQUFLLGNBQWMsS0FBSyxpQkFBaUI7QUFDbkcsUUFBSSxNQUFNLE1BQU0sUUFBUSxhQUFhLElBQUksVUFBVSxlQUFlLFNBQVUsU0FBUztBQUNuRixhQUFPLFFBQVEsS0FBSyxhQUFhO0FBQUEsSUFDbkMsQ0FBQyxJQUFJLFFBQVEsZUFBZSxTQUFVLFNBQVM7QUFDN0MsYUFBTyxRQUFRLEtBQUssYUFBYTtBQUFBLElBQ25DLENBQUM7QUFDRCxRQUFJO0FBQ0osWUFBUSxLQUFLLGdCQUFnQixLQUFLLGNBQWMsR0FBRyxJQUFJO0FBQ3ZELFlBQVEsUUFBUSxnQkFBZ0IsUUFBUSxjQUFjLEtBQUssSUFBSTtBQUMvRCxRQUFJLE9BQU8sT0FBTyxNQUFNLGNBQWMsTUFBTTtBQUM1QyxXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBQ0EsU0FBUyxRQUFRLFFBQVEsV0FBVztBQUNsQyxXQUFTLE9BQU8sUUFBUTtBQUN0QixRQUFJLE9BQU8sZUFBZSxHQUFHLEtBQUssVUFBVSxPQUFPLEdBQUcsQ0FBQyxHQUFHO0FBQ3hELGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUNBLFNBQVMsVUFBVSxPQUFPLFdBQVc7QUFDbkMsV0FBUyxNQUFNLEdBQUcsTUFBTSxNQUFNLFFBQVEsT0FBTztBQUMzQyxRQUFJLFVBQVUsTUFBTSxHQUFHLENBQUMsR0FBRztBQUN6QixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7OztBQ3pDZSxTQUFSLG9CQUFxQyxNQUFNO0FBQ2hELFNBQU8sU0FBVSxRQUFRO0FBQ3ZCLFFBQUksVUFBVSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDbkYsUUFBSSxjQUFjLE9BQU8sTUFBTSxLQUFLLFlBQVk7QUFDaEQsUUFBSSxDQUFDO0FBQWEsYUFBTztBQUN6QixRQUFJLGdCQUFnQixZQUFZLENBQUM7QUFDakMsUUFBSSxjQUFjLE9BQU8sTUFBTSxLQUFLLFlBQVk7QUFDaEQsUUFBSSxDQUFDO0FBQWEsYUFBTztBQUN6QixRQUFJLFFBQVEsS0FBSyxnQkFBZ0IsS0FBSyxjQUFjLFlBQVksQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDO0FBQ25GLFlBQVEsUUFBUSxnQkFBZ0IsUUFBUSxjQUFjLEtBQUssSUFBSTtBQUMvRCxRQUFJLE9BQU8sT0FBTyxNQUFNLGNBQWMsTUFBTTtBQUM1QyxXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOzs7QUNkQSxJQUFJLDRCQUE0QjtBQUNoQyxJQUFJLDRCQUE0QjtBQUNoQyxJQUFJLG1CQUFtQjtBQUFBLEVBQ3JCLFFBQVE7QUFBQSxFQUNSLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFDUjtBQUNBLElBQUksbUJBQW1CO0FBQUEsRUFDckIsS0FBSyxDQUFDLE9BQU8sU0FBUztBQUN4QjtBQUNBLElBQUksdUJBQXVCO0FBQUEsRUFDekIsUUFBUTtBQUFBLEVBQ1IsYUFBYTtBQUFBLEVBQ2IsTUFBTTtBQUNSO0FBQ0EsSUFBSSx1QkFBdUI7QUFBQSxFQUN6QixLQUFLLENBQUMsTUFBTSxNQUFNLE1BQU0sSUFBSTtBQUM5QjtBQUNBLElBQUkscUJBQXFCO0FBQUEsRUFDdkIsUUFBUTtBQUFBLEVBQ1IsYUFBYTtBQUFBLEVBQ2IsTUFBTTtBQUNSO0FBQ0EsSUFBSSxxQkFBcUI7QUFBQSxFQUN2QixRQUFRLENBQUMsT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLEtBQUs7QUFBQSxFQUMzRixLQUFLLENBQUMsUUFBUSxPQUFPLFNBQVMsUUFBUSxTQUFTLFNBQVMsU0FBUyxRQUFRLE9BQU8sT0FBTyxPQUFPLEtBQUs7QUFDckc7QUFDQSxJQUFJLG1CQUFtQjtBQUFBLEVBQ3JCLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFDUjtBQUNBLElBQUksbUJBQW1CO0FBQUEsRUFDckIsUUFBUSxDQUFDLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLEtBQUs7QUFBQSxFQUN4RCxLQUFLLENBQUMsUUFBUSxPQUFPLFFBQVEsT0FBTyxRQUFRLE9BQU8sTUFBTTtBQUMzRDtBQUNBLElBQUkseUJBQXlCO0FBQUEsRUFDM0IsUUFBUTtBQUFBLEVBQ1IsS0FBSztBQUNQO0FBQ0EsSUFBSSx5QkFBeUI7QUFBQSxFQUMzQixLQUFLO0FBQUEsSUFDSCxJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixVQUFVO0FBQUEsSUFDVixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsRUFDVDtBQUNGO0FBQ0EsSUFBSSxRQUFRO0FBQUEsRUFDVixlQUFlLG9CQUFvQjtBQUFBLElBQ2pDLGNBQWM7QUFBQSxJQUNkLGNBQWM7QUFBQSxJQUNkLGVBQWUsU0FBUyxjQUFjLE9BQU87QUFDM0MsYUFBTyxTQUFTLE9BQU8sRUFBRTtBQUFBLElBQzNCO0FBQUEsRUFDRixDQUFDO0FBQUEsRUFDRCxLQUFLLGFBQWE7QUFBQSxJQUNoQixlQUFlO0FBQUEsSUFDZixtQkFBbUI7QUFBQSxJQUNuQixlQUFlO0FBQUEsSUFDZixtQkFBbUI7QUFBQSxFQUNyQixDQUFDO0FBQUEsRUFDRCxTQUFTLGFBQWE7QUFBQSxJQUNwQixlQUFlO0FBQUEsSUFDZixtQkFBbUI7QUFBQSxJQUNuQixlQUFlO0FBQUEsSUFDZixtQkFBbUI7QUFBQSxJQUNuQixlQUFlLFNBQVNDLGVBQWMsT0FBTztBQUMzQyxhQUFPLFFBQVE7QUFBQSxJQUNqQjtBQUFBLEVBQ0YsQ0FBQztBQUFBLEVBQ0QsT0FBTyxhQUFhO0FBQUEsSUFDbEIsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsSUFDbkIsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsRUFDckIsQ0FBQztBQUFBLEVBQ0QsS0FBSyxhQUFhO0FBQUEsSUFDaEIsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsSUFDbkIsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsRUFDckIsQ0FBQztBQUFBLEVBQ0QsV0FBVyxhQUFhO0FBQUEsSUFDdEIsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsSUFDbkIsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsRUFDckIsQ0FBQztBQUNIO0FBQ0EsSUFBTyxnQkFBUTs7O0FDbkZmLElBQUksU0FBUztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sZ0JBQWdCO0FBQUEsRUFDaEIsWUFBWTtBQUFBLEVBQ1osZ0JBQWdCO0FBQUEsRUFDaEIsVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLElBQ1AsY0FBYztBQUFBLElBQ2QsdUJBQXVCO0FBQUEsRUFDekI7QUFDRjtBQUNBLElBQU8sZ0JBQVE7OztBQ3pCZixJQUFPLHdCQUFROzs7QUNvQmYsSUFBSSx5QkFBeUI7QUFJN0IsSUFBSSw2QkFBNkI7QUFDakMsSUFBSSxzQkFBc0I7QUFDMUIsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSxnQ0FBZ0M7QUFzU3JCLFNBQVIsT0FBd0IsV0FBVyxnQkFBZ0IsU0FBUztBQUNqRSxNQUFJLE1BQU0saUJBQWlCLE9BQU8sT0FBTyxPQUFPLHVCQUF1QixrQkFBa0IsdUJBQXVCLHVCQUF1Qix3QkFBd0IsT0FBTyxPQUFPLE9BQU8sdUJBQXVCLGtCQUFrQix1QkFBdUIsd0JBQXdCO0FBQzVRLGVBQWEsR0FBRyxTQUFTO0FBQ3pCLE1BQUksWUFBWSxPQUFPLGNBQWM7QUFDckMsTUFBSUMsa0JBQWlCLGtCQUFrQjtBQUN2QyxNQUFJQyxXQUFVLFFBQVEsa0JBQWtCLFlBQVksUUFBUSxZQUFZLFNBQVMsU0FBUyxRQUFRLFlBQVksUUFBUSxvQkFBb0IsU0FBUyxrQkFBa0JELGdCQUFlLFlBQVksUUFBUSxTQUFTLFNBQVMsT0FBTztBQUNqTyxNQUFJLHdCQUF3QixXQUFXLFNBQVMsU0FBUyxTQUFTLHdCQUF3QixZQUFZLFFBQVEsWUFBWSxTQUFTLFNBQVMsUUFBUSwyQkFBMkIsUUFBUSwwQkFBMEIsU0FBUyx3QkFBd0IsWUFBWSxRQUFRLFlBQVksU0FBUyxVQUFVLG1CQUFtQixRQUFRLFlBQVksUUFBUSxxQkFBcUIsU0FBUyxVQUFVLHdCQUF3QixpQkFBaUIsYUFBYSxRQUFRLDBCQUEwQixTQUFTLFNBQVMsc0JBQXNCLDJCQUEyQixRQUFRLFVBQVUsU0FBUyxRQUFRQSxnQkFBZSwyQkFBMkIsUUFBUSxVQUFVLFNBQVMsU0FBUyx3QkFBd0JBLGdCQUFlLFlBQVksUUFBUSwwQkFBMEIsU0FBUyxVQUFVLHlCQUF5QixzQkFBc0IsYUFBYSxRQUFRLDJCQUEyQixTQUFTLFNBQVMsdUJBQXVCLDJCQUEyQixRQUFRLFVBQVUsU0FBUyxRQUFRLENBQUM7QUFHdjdCLE1BQUksRUFBRSx5QkFBeUIsS0FBSyx5QkFBeUIsSUFBSTtBQUMvRCxVQUFNLElBQUksV0FBVywyREFBMkQ7QUFBQSxFQUNsRjtBQUNBLE1BQUksZUFBZSxXQUFXLFNBQVMsU0FBUyxTQUFTLHdCQUF3QixZQUFZLFFBQVEsWUFBWSxTQUFTLFNBQVMsUUFBUSxrQkFBa0IsUUFBUSwwQkFBMEIsU0FBUyx3QkFBd0IsWUFBWSxRQUFRLFlBQVksU0FBUyxVQUFVLG1CQUFtQixRQUFRLFlBQVksUUFBUSxxQkFBcUIsU0FBUyxVQUFVLHdCQUF3QixpQkFBaUIsYUFBYSxRQUFRLDBCQUEwQixTQUFTLFNBQVMsc0JBQXNCLGtCQUFrQixRQUFRLFVBQVUsU0FBUyxRQUFRQSxnQkFBZSxrQkFBa0IsUUFBUSxVQUFVLFNBQVMsU0FBUyx5QkFBeUJBLGdCQUFlLFlBQVksUUFBUSwyQkFBMkIsU0FBUyxVQUFVLHlCQUF5Qix1QkFBdUIsYUFBYSxRQUFRLDJCQUEyQixTQUFTLFNBQVMsdUJBQXVCLGtCQUFrQixRQUFRLFVBQVUsU0FBUyxRQUFRLENBQUM7QUFHNzRCLE1BQUksRUFBRSxnQkFBZ0IsS0FBSyxnQkFBZ0IsSUFBSTtBQUM3QyxVQUFNLElBQUksV0FBVyxrREFBa0Q7QUFBQSxFQUN6RTtBQUNBLE1BQUksQ0FBQ0MsUUFBTyxVQUFVO0FBQ3BCLFVBQU0sSUFBSSxXQUFXLHVDQUF1QztBQUFBLEVBQzlEO0FBQ0EsTUFBSSxDQUFDQSxRQUFPLFlBQVk7QUFDdEIsVUFBTSxJQUFJLFdBQVcseUNBQXlDO0FBQUEsRUFDaEU7QUFDQSxNQUFJLGVBQWUsT0FBTyxTQUFTO0FBQ25DLE1BQUksQ0FBQyxRQUFRLFlBQVksR0FBRztBQUMxQixVQUFNLElBQUksV0FBVyxvQkFBb0I7QUFBQSxFQUMzQztBQUtBLE1BQUksaUJBQWlCLGdDQUFnQyxZQUFZO0FBQ2pFLE1BQUksVUFBVSxnQkFBZ0IsY0FBYyxjQUFjO0FBQzFELE1BQUksbUJBQW1CO0FBQUEsSUFDckI7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRQTtBQUFBLElBQ1IsZUFBZTtBQUFBLEVBQ2pCO0FBQ0EsTUFBSSxTQUFTLFVBQVUsTUFBTSwwQkFBMEIsRUFBRSxJQUFJLFNBQVUsV0FBVztBQUNoRixRQUFJLGlCQUFpQixVQUFVLENBQUM7QUFDaEMsUUFBSSxtQkFBbUIsT0FBTyxtQkFBbUIsS0FBSztBQUNwRCxVQUFJLGdCQUFnQix1QkFBZSxjQUFjO0FBQ2pELGFBQU8sY0FBYyxXQUFXQSxRQUFPLFVBQVU7QUFBQSxJQUNuRDtBQUNBLFdBQU87QUFBQSxFQUNULENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLHNCQUFzQixFQUFFLElBQUksU0FBVSxXQUFXO0FBRWpFLFFBQUksY0FBYyxNQUFNO0FBQ3RCLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxpQkFBaUIsVUFBVSxDQUFDO0FBQ2hDLFFBQUksbUJBQW1CLEtBQUs7QUFDMUIsYUFBTyxtQkFBbUIsU0FBUztBQUFBLElBQ3JDO0FBQ0EsUUFBSSxZQUFZLG1CQUFXLGNBQWM7QUFDekMsUUFBSSxXQUFXO0FBQ2IsVUFBSSxFQUFFLFlBQVksUUFBUSxZQUFZLFVBQVUsUUFBUSxnQ0FBZ0MseUJBQXlCLFNBQVMsR0FBRztBQUMzSCw0QkFBb0IsV0FBVyxnQkFBZ0IsT0FBTyxTQUFTLENBQUM7QUFBQSxNQUNsRTtBQUNBLFVBQUksRUFBRSxZQUFZLFFBQVEsWUFBWSxVQUFVLFFBQVEsaUNBQWlDLDBCQUEwQixTQUFTLEdBQUc7QUFDN0gsNEJBQW9CLFdBQVcsZ0JBQWdCLE9BQU8sU0FBUyxDQUFDO0FBQUEsTUFDbEU7QUFDQSxhQUFPLFVBQVUsU0FBUyxXQUFXQSxRQUFPLFVBQVUsZ0JBQWdCO0FBQUEsSUFDeEU7QUFDQSxRQUFJLGVBQWUsTUFBTSw2QkFBNkIsR0FBRztBQUN2RCxZQUFNLElBQUksV0FBVyxtRUFBbUUsaUJBQWlCLEdBQUc7QUFBQSxJQUM5RztBQUNBLFdBQU87QUFBQSxFQUNULENBQUMsRUFBRSxLQUFLLEVBQUU7QUFDVixTQUFPO0FBQ1Q7QUFDQSxTQUFTLG1CQUFtQixPQUFPO0FBQ2pDLE1BQUksVUFBVSxNQUFNLE1BQU0sbUJBQW1CO0FBQzdDLE1BQUksQ0FBQyxTQUFTO0FBQ1osV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLFFBQVEsQ0FBQyxFQUFFLFFBQVEsbUJBQW1CLEdBQUc7QUFDbEQ7OztBQ2paTyxJQUFNLHFCQUFxQjtBQUMzQixJQUFNLGlCQUFpQjtBQUN2QixJQUFNLDBCQUEwQjtBQUNoQyxJQUFNLDJCQUEyQjtBQUNqQyxJQUFNLG9CQUFxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNIbEMsU0FBb0I7QUFDcEIsV0FBc0I7QUFFZixTQUFTLDZCQUE2QixnQkFBd0IsYUFBcUIsYUFBNkI7QUFDdEgsUUFBTSxnQkFB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QVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxJQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLEtBQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDbkQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN0RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFDekQ7QUFFTyxTQUFTLGtCQUFrQixRQUEyQjtBQUMzRCxNQUFJLFFBQW1CLFVBQVUsQ0FBQztBQUNsQyxhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLFVBQVUsS0FBSyxRQUFRO0FBQ3pCLGNBQVE7QUFBQSxJQUNWLE9BQU87QUFDTDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBRU8sU0FBUyxxQkFBcUIsYUFBNkI7QUFDaEUsTUFBSSxlQUFlO0FBQ25CLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksZUFBZSxLQUFLLFNBQVMsZ0JBQWdCLEdBQUc7QUFDbEQscUJBQWUsS0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUdGLFNBQU87QUFDUDs7O0FDOUlGLElBQU0sMEJBQW9DO0FBQUEsRUFDekM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLGtCQUE0QjtBQUFBLEVBQ2pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLHFCQUErQjtBQUFBLEVBQ3BDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBR08sU0FBUyxnQ0FBZ0MsUUFBd0I7QUFDdkUsUUFBTSxjQUFjLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSx3QkFBd0IsTUFBTTtBQUM3RSxRQUFNLFVBQVUsd0JBQXdC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Q0Q7QUFHQSxlQUFlLHFCQUFxQixRQUFnQixRQUFnQjtBQUNuRSxRQUFNLGFBQWEsS0FBSyxJQUFJLFVBQVUsb0JBQW9CLDZCQUFZO0FBRXRFLE1BQUksQ0FBQyxZQUFZO0FBQ2hCLFlBQVEsTUFBTSxnQ0FBZ0M7QUFDOUM7QUFBQSxFQUNEO0FBRUEsUUFBTSxTQUFTLFdBQVc7QUFDMUIsUUFBTSxlQUFlLE9BQU8sYUFBYTtBQUV6QyxNQUFJLENBQUMsY0FBYztBQUNsQixZQUFRLE1BQU0sc0VBQXNFO0FBQ3BGO0FBQUEsRUFDRDtBQUVBLE1BQUksZUFBZSxhQUFhLFdBQVcsUUFBUSxrQkFBTTtBQUN6RCxpQkFBZSxhQUFhLFdBQVcsUUFBUSwwQkFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsNEJBQVEsTUFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsb0JBQVEsTUFBTTtBQUVyRCxTQUFPLGlCQUFpQixZQUFZO0FBQ3JDO0FBRUEsU0FBUyw2QkFBNkIsZUFBdUIsV0FBMkI7QUFDdkYsTUFBSTtBQUNKLE1BQUksU0FBUyxlQUFlLEVBQUUsSUFBSSxXQUFVO0FBQzNDLG1CQUFlLFlBQVksU0FBUyxlQUFlLEVBQUU7QUFBQSxFQUN0RCxPQUFPO0FBQ04sbUJBQWU7QUFBQSxFQUNoQjtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImFwcCIsICJvYmoiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiTUlMTElTRUNPTkRTX0lOX1dFRUsiLCAiZm9ybWF0dGVycyIsICJsb2NhbGl6ZSIsICJ5IiwgIk0iLCAiZCIsICJhIiwgImgiLCAiSCIsICJtIiwgInMiLCAiUyIsICJkYXRlTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXRMb25nIiwgInRpbWVMb25nRm9ybWF0dGVyIiwgImRhdGVUaW1lTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXQiLCAiZm9ybWF0RGlzdGFuY2UiLCAiZm9ybWF0IiwgImZvcm1hdFJlbGF0aXZlIiwgIm9yZGluYWxOdW1iZXIiLCAidmFsdWVDYWxsYmFjayIsICJkZWZhdWx0T3B0aW9ucyIsICJsb2NhbGUiLCAibWF0Y2giLCAicGF0aCIsICJhcHAiLCAiZmlsZU5hbWUiLCAiY3VycmVudENvdW50IiwgImkiLCAiaSIsICJlIiwgImkiLCAibWF0Y2giLCAiZmlsZSIsICJhcHAiXQp9Cg== diff --git a/src/main.ts b/src/main.ts index c79529c..84d44c9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -707,9 +707,9 @@ export default class gamification extends Plugin { const progressBarEnd = nextLevelAt - newPoints; const newPointsString = '| **Level** | **' + level.level + '** |\n| Points | ' + newPoints + ' |\n^levelAndPoints\n```chart\ntype: bar\nlabels: [Expririence]\nseries:\n - title: points reached\n data: [' + newPoints + ']\n - title: points to earn to level up\n data: [' + progressBarEnd + ']\nxMin: ' + level.points + '\nxMax: ' + level.pointsNext + '\ntension: 0.2\nwidth: 40%\nlabelColors: false\nfill: false\nbeginAtZero: false\nbestFit: false\nbestFitTitle: undefined\nbestFitNumber: 0\nstacked: true\nindexAxis: y\nxTitle: "progress"\nlegend: false\n```' - const dailyChallenge = '| **daily Notes** | *500EP* | **' + this.settings.dailyNoteCreationTask + '/2** |'; + const dailyChallenge = '| **daily Notes** | *' + pointsForDailyChallenge * (this.settings.badgeBoosterFactor + this.settings.streakbooster) + 'EP* | **' + this.settings.dailyNoteCreationTask + '/2** |'; const daysLeftInWeeklyChain : number = 7 - this.settings.weeklyNoteCreationTask; - const weeklyChallenge = '| **weekly Notes** | *2000EP* | **' + this.settings.weeklyNoteCreationTask + '/7** |\n^weeklyNotesChallenge\n```chart\ntype: bar\nlabels: [days done in a row]\nseries:\n - title: days to do in a row\n data: [' + this.settings.weeklyNoteCreationTask + ']\n - title: points to earn to level up\n data: [' + daysLeftInWeeklyChain + ']\nxMin: 0\nxMax: 7\ntension: 0.2\nwidth: 40%\nlabelColors: false\nfill: false\nbeginAtZero: false\nbestFit: false\nbestFitTitle: undefined\nbestFitNumber: 0\nstacked: true\nindexAxis: y\nxTitle: "progress"\nlegend: false\n```'; + const weeklyChallenge = '| **weekly Notes** | *' + pointsForWeeklyChallenge * (this.settings.badgeBoosterFactor + this.settings.streakbooster) + 'EP* | **' + this.settings.weeklyNoteCreationTask + '/7** |\n^weeklyNotesChallenge\n```chart\ntype: bar\nlabels: [days done in a row]\nseries:\n - title: days to do in a row\n data: [' + this.settings.weeklyNoteCreationTask + ']\n - title: points to earn to level up\n data: [' + daysLeftInWeeklyChain + ']\nxMin: 0\nxMax: 7\ntension: 0.2\nwidth: 40%\nlabelColors: false\nfill: false\nbeginAtZero: false\nbestFit: false\nbestFitTitle: undefined\nbestFitNumber: 0\nstacked: true\nindexAxis: y\nxTitle: "progress"\nlegend: false\n```'; const boosterFactor = '| **booster factor** | **' + this.settings.streakbooster + '** |' if (reference != null && reference2 != null && reference3 != null && reference4 != null){ From 48d9b6b5360ea3fe7ecdba22a432b0a6eee49581 Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 23:04:43 +0200 Subject: [PATCH 10/15] statusbar booster information --- main.js | 23 +++++++++++++++++------ src/main.ts | 31 ++++++++++++++++++++++++++----- src/settings.ts | 6 +++--- 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/main.js b/main.js index 2eeee62..be5749e 100644 --- a/main.js +++ b/main.js @@ -65,7 +65,7 @@ var defaultSettings = { weeklyNoteCreationTask: 0, weeklyNoteCreationDate: "12.08.2023", streakbooster: 0, - streakboosterDate: "12.08.2023" + streakboosterDate: false }; var GamificationPluginSettings = class extends import_obsidian.PluginSettingTab { constructor(app2, plugin) { @@ -2969,8 +2969,8 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` this.settings.weeklyNoteCreationTask = 0; this.settings.weeklyNoteCreationDate = window.moment().subtract(1, "day").format("DD.MM.YYYY"); this.decreaseStreakbooster(1); - this.settings.streakboosterDate = window.moment().subtract(1, "day").format("DD.MM.YYYY"); await this.saveSettings(); + await this.updateStatusBar(this.statusbarGamification); console.log(`weekly Challenge reseted`); reset = true; } @@ -2995,8 +2995,8 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` console.log(`${newDailyNoteCreationTask}/2 Notes created today.`); } else if (newDailyNoteCreationTask == 2) { this.increaseStreakbooster(0.1); - this.settings.streakboosterDate = window.moment().format("DD.MM.YYYY"); await this.saveSettings(); + await this.updateStatusBar(this.statusbarGamification); await this.giveStatusPoints(pointsForDailyChallenge); const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge * (this.settings.badgeBoosterFactor + this.settings.streakbooster)); console.log(`daily Challenge reached! ${newDailyNoteCreationTask}/2 created.`); @@ -3034,7 +3034,6 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` console.log(`${newWeeklyNoteCreationTask}/7 Notes created in a chain.`); } else if (newWeeklyNoteCreationTask == 7) { this.increaseStreakbooster(1); - this.settings.streakboosterDate = window.moment().format("DD.MM.YYYY"); await this.saveSettings(); await this.giveStatusPoints(pointsForWeeklyChallenge); console.log(`Weekly Challenge reached! ${newWeeklyNoteCreationTask}/7 created in a chain.`); @@ -3050,7 +3049,17 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` const progressbarPercent = (this.settings.statusPoints - currentLevel.points) / (currentLevel.pointsNext - currentLevel.points) * 100; const charNumProgressbar = 10; const barLength = Math.round(progressbarPercent / charNumProgressbar); - statusbar.setText(`\u{1F3B2}|lvl: ${this.settings.statusLevel} | ${this.createProgressbar(charNumProgressbar, barLength)}`); + const boosterFactor = this.settings.streakbooster; + statusbar.setText(`\u{1F3B2}|lvl: ${this.settings.statusLevel} | ${this.createProgressbar(charNumProgressbar, barLength)}|\u{1F680}${boosterFactor}${this.rateBoosterDirection()}`); + } + rateBoosterDirection() { + let direction = "\u2B06\uFE0F"; + if (this.settings.streakboosterDate) { + direction = "\u2B06\uFE0F"; + } else { + direction = "\u2B07\uFE0F"; + } + return direction; } createProgressbar(charNumProgressbar, barLength) { let progressbar = ""; @@ -3083,6 +3092,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` async increaseStreakbooster(increaseValue) { const newValue = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); this.settings.streakbooster = newValue; + this.settings.streakboosterDate = true; await this.saveData(this.settings); console.log(`streakbooster: ${this.settings.streakbooster}`); } @@ -3093,6 +3103,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` newValue = 0; } this.settings.streakbooster = newValue; + this.settings.streakboosterDate = false; await this.saveData(this.settings); } async updateAvatarPage(avatarPageName) { @@ -3450,4 +3461,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJyk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpXHJcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlICogKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyKSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZWFjaGVkISAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBjcmVhdGVkLmApXHJcblx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHQvLyBkbyBub3RoaW5nXHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBub3RlIGNyZWF0aW9uIHdhcyByYXRlZCBhbHJlYWR5IHRvZGF5LmApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCkge1xyXG5cdFx0bGV0IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRpZiAoY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA8IDcpIHtcclxuXHRcdFx0Y3VycmVudFdlZWtseUNyZWF0ZWROb3RlcysrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXIpIHtcclxuXHRcdGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrIDw9IDYpIHtcclxuXHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKDEpO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSAqICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcikpO1xyXG5cdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgdXBkYXRlU3RhdHVzQmFyKHN0YXR1c2JhcjogSFRNTFNwYW5FbGVtZW50KXtcclxuXHRcdGNvbnN0IGN1cnJlbnRMZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKVxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NiYXJQZXJjZW50ID0gKHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzIC0gY3VycmVudExldmVsLnBvaW50cykvKGN1cnJlbnRMZXZlbC5wb2ludHNOZXh0IC0gY3VycmVudExldmVsLnBvaW50cykqMTAwO1xyXG5cdFx0Y29uc3QgY2hhck51bVByb2dyZXNzYmFyID0gMTBcclxuXHRcdGNvbnN0IGJhckxlbmd0aCA9IE1hdGgucm91bmQocHJvZ3Jlc3NiYXJQZXJjZW50IC8gY2hhck51bVByb2dyZXNzYmFyKVxyXG5cdFx0c3RhdHVzYmFyLnNldFRleHQoYFx1RDgzQ1x1REZCMnxsdmw6ICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gfCAke3RoaXMuY3JlYXRlUHJvZ3Jlc3NiYXIoY2hhck51bVByb2dyZXNzYmFyLCBiYXJMZW5ndGgpfWApXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZVByb2dyZXNzYmFyKGNoYXJOdW1Qcm9ncmVzc2JhcjogbnVtYmVyLCBiYXJMZW5ndGg6IG51bWJlcikge1xyXG5cdFx0bGV0IHByb2dyZXNzYmFyID0gJydcclxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDw9IGNoYXJOdW1Qcm9ncmVzc2JhcjsgaSsrKSB7XHJcblx0XHRcdGlmIChpIDw9IGJhckxlbmd0aCkge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICc9J1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHByb2dyZXNzYmFyICs9ICctJ1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJvZ3Jlc3NiYXI7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdFx0Y29uc29sZS5sb2coJ2xvYWRTZXR0aW5ncygpJylcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNUb0FkZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGxldCBib29zdGVyRmFjdG9yID0gMTtcclxuXHRcdGxldCBzdHJlYWtib29zdGVyID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyO1xyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSBwb2ludHNUb0FkZCAqIChib29zdGVyRmFjdG9yICsgc3RyZWFrYm9vc3RlcikgKyB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlU3RyZWFrYm9vc3RlcihpbmNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHRjb25zdCBuZXdWYWx1ZSA9IHBhcnNlRmxvYXQoKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArIGluY3JlYXNlVmFsdWUpLnRvRml4ZWQoMSkpO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3VmFsdWU7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRjb25zb2xlLmxvZyhgc3RyZWFrYm9vc3RlcjogJHt0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJ9YClcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gcGFyc2VGbG9hdCgodGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC0gZGVjcmVhc2VWYWx1ZSkudG9GaXhlZCgxKSlcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiAnMTIuMDguMjAyMycsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElTZXR0aW5ncyB7XG4gIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBiaW5kRW50ZXI6IGJvb2xlYW47XG4gIGJpbmRUYWI6IGJvb2xlYW47XG4gIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XG4gIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcbiAgbnVtQWxsRmlsZXM6IG51bWJlcjtcbiAgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XG4gIHN0YXR1c1BvaW50czogbnVtYmVyO1xuICBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xuICBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcbiAgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xuICBkZWJ1ZzogYm9vbGVhbjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xuICBzdHJlYWtib29zdGVyRGF0ZTogc3RyaW5nO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogZ2FtaWZpY2F0aW9uKSB7XG5cdCAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuXHQgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHR9XG4gIFxuXHRwdWJsaWMgZGlzcGxheSgpOiB2b2lkIHtcblx0XHRjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXHRcdGNvbnRhaW5lckVsLmFkZENsYXNzKFwiZXhjYWxpZHJhdy1zZXR0aW5nc1wiKTtcblx0XHR0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG5cblx0XHRjb25zdCBjb2ZmZWVEaXYgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoXCJjb2ZmZWVcIik7XG5cdFx0Y29mZmVlRGl2LmFkZENsYXNzKFwiZXgtY29mZmVlLWRpdlwiKTtcblx0XHRjb25zdCBjb2ZmZWVMaW5rID0gY29mZmVlRGl2LmNyZWF0ZUVsKFwiYVwiLCB7XG5cdFx0aHJlZjogXCJodHRwczovL2tvLWZpLmNvbS9hbmRyZWFzdHJlYmluZ1wiLFxuXHRcdH0pO1xuXHRcdGNvbnN0IGNvZmZlZUltZyA9IGNvZmZlZUxpbmsuY3JlYXRlRWwoXCJpbWdcIiwge1xuXHRcdGF0dHI6IHtcblx0XHRcdHNyYzogXCJodHRwczovL2Nkbi5rby1maS5jb20vY2RuL2tvZmkzLnBuZz92PTNcIixcblx0XHR9LFxuXHRcdH0pO1xuXHRcdGNvZmZlZUltZy5oZWlnaHQgPSA0NTtcblxuXHRcdC8vY29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHQvL2NvbnRhaW5lckVsLmVtcHR5KCk7XG4gIFxuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ0dhbWlmeSB5b3VyIFBLTSAtIFNldHRpbmdzJyB9KTtcblx0XHRjb25zb2xlLmxvZygnc2V0dGluZ3MgY2FsbGVkJylcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCcjdGFncyB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIHRhZ3Mgd2l0aG91dCAjIGFuZCBzZXBhcmF0ZSB3aXRoIFwiLCBcIi5cXG5JbmNsdWRlIG5lc3RlZCB0YWdzLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdFbnRlciB5b3VyIHRhZzEsIHRhZzIvc3VidGFnLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cblx0XHRcdFx0XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnZm9sZGVyIHRvIGlnbm9yZScpXG5cdFx0XHQuc2V0RGVzYygnZW50ZXIgZm9sZGVyIHdoaWNocyBjb250ZW50IHNoYWxsIGJlIGlnbm9yZWQuIFNlcGFyYXRlIHdpdGggXCIsIFwiLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdFbnRlciB5b3VyIGZvbGRlcjEsIGZvbGRlcjIsIFx1MjAyNicpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnUHJvZmlsZSBQYWdlIE5hbWUnKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIGhlcmUgdGhlIG5hbWUgb2YgeW91ciBwcm9maWxlIHBhZ2UgaWYgeW91IGxpa2UuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignbmFtZScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdPdGhlciBTZXR0aW5ncycgfSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnRGlzYWJsZSBJbml0IENvbW1hbmQnKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gcmVtb3ZlIHRoZSBpbml0IGNvbW1hbmQgZnJvbSBjb21tYW5kIHByb21wdCBieSBzd2l0Y2hpbmcgb2ZmLlxcbnJlc3RhcnQgbmVlZGVkLicpXG5cdFx0XHQuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IFxuXHRcdFx0XHR0b2dnbGVcbiAgICAgICAgICBcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kKVxuICAgICAgICBcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZCA9IHZhbHVlO1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuICAgICAgICAgIFx0XHRcdH0pLFxuXHRcdFx0KTtcblxuXHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2xpbWl0IHRoZSB2aXNpYmxlIG1vbnRoIGluIHRoZSBjaGFydCBvbiB5b3VyIGF2YXRhciBwYWdlOiAnICsgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXG5cdFx0XHQuc2V0RGVzYygnaWYgMCwgYWxsIG1vbnRoIHdpbGwgYmUgc2hvd24uIEVudGVyIGEgbnVtYmVyIGhvdyBtYW55IG1vbnRoIHNoYWxsIGJlIHNob3duLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ051bWJlciBvZiBNb250aCB0byBzaG93Jylcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZS50b1N0cmluZygpKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPSBwYXJzZUludCh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG4gIFxuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnUHJvZ3Jlc3NpdmUgU3VtbWFyaXphdGlvbicpXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2Ugd2hpY2ggZm9ybWF0dGluZyB5b3UgdXNlIGZvciBMYXllciAyIGFuZCAzLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0xheWVyIDIgaXMgdXN1YWxseSAqKicpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0xheWVyIDMgaXMgdXN1YWxseSA9PScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdH0pKTtcblxuXHR9XG4gIH0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWlyZWRBcmdzKHJlcXVpcmVkLCBhcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA8IHJlcXVpcmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihyZXF1aXJlZCArICcgYXJndW1lbnQnICsgKHJlcXVpcmVkID4gMSA/ICdzJyA6ICcnKSArICcgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmdzLmxlbmd0aCArICcgcHJlc2VudCcpO1xuICB9XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBkYXRlP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLiBUaGUgZnVuY3Rpb24gd29ya3MgZm9yIGRhdGVzIHRyYW5zZmVycmVkIGFjcm9zcyBpZnJhbWVzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRhdGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGEgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZSgpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoTmFOKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3Igc29tZSB2YWx1ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSgnMjAxNC0wMi0zMScpXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBvYmplY3Q6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoe30pXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCBfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGFyZ1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCk7XG5cbiAgLy8gQ2xvbmUgdGhlIGRhdGVcbiAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgRGF0ZSB8fCBfdHlwZW9mKGFyZ3VtZW50KSA9PT0gJ29iamVjdCcgJiYgYXJnU3RyID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdudW1iZXInIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgTnVtYmVyXScpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IFN0cmluZ10nKSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXCJTdGFydGluZyB3aXRoIHYyLjAuMC1iZXRhLjEgZGF0ZS1mbnMgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyBhcyBkYXRlIGFyZ3VtZW50cy4gUGxlYXNlIHVzZSBgcGFyc2VJU09gIHRvIHBhcnNlIHN0cmluZ3MuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI3N0cmluZy1hcmd1bWVudHNcIik7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cbn0iLCAiaW1wb3J0IGlzRGF0ZSBmcm9tIFwiLi4vaXNEYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzVmFsaWRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdmFsaWQ/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGZhbHNlIGlmIGFyZ3VtZW50IGlzIEludmFsaWQgRGF0ZSBhbmQgdHJ1ZSBvdGhlcndpc2UuXG4gKiBBcmd1bWVudCBpcyBjb252ZXJ0ZWQgdG8gRGF0ZSB1c2luZyBgdG9EYXRlYC4gU2VlIFt0b0RhdGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlfVxuICogSW52YWxpZCBEYXRlIGlzIGEgRGF0ZSwgd2hvc2UgdGltZSB2YWx1ZSBpcyBOYU4uXG4gKlxuICogVGltZSB2YWx1ZSBvZiBEYXRlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjkuMS4xXG4gKlxuICogQHBhcmFtIHsqfSBkYXRlIC0gdGhlIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZSBpcyB2YWxpZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoMjAxNCwgMSwgMzEpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsdWUsIGNvbnZlcnRhYmxlIGludG8gYSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZCgxMzkzODA0ODAwMDAwKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgnJykpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVmFsaWQoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICBpZiAoIWlzRGF0ZShkaXJ0eURhdGUpICYmIHR5cGVvZiBkaXJ0eURhdGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHJldHVybiAhaXNOYU4oTnVtYmVyKGRhdGUpKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn0iLCAiaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgYWRkTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZE1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjMwLjc1MFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufSIsICJpbXBvcnQgYWRkTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9hZGRNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdWJNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgc3VidHJhY3RlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA3NTAgbWlsbGlzZWNvbmRzIGZyb20gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1Yk1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjI5LjI1MFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCAtYW1vdW50KTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fREFZID0gODY0MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENEYXlPZlllYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mWWVhclRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICB2YXIgZGlmZmVyZW5jZSA9IHRpbWVzdGFtcCAtIHN0YXJ0T2ZZZWFyVGltZXN0YW1wO1xuICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gTUlMTElTRUNPTkRTX0lOX0RBWSkgKyAxO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gMTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENGdWxsWWVhcih5ZWFyICsgMSwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHllYXIgPSBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5ID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDSVNPV2VlayhkYXRlKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGF0ZSkuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJ2YXIgZGVmYXVsdE9wdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXdPcHRpb25zO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGZpcnN0V2Vla09mTmV4dFllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENGdWxsWWVhcih5ZWFyICsgMSwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mTmV4dFllYXIsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZlRoaXNZZWFyLCBvcHRpb25zKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcbiAgdmFyIHllYXIgPSBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vlay5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWsuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrLCBvcHRpb25zKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENXZWVrKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIsIHRhcmdldExlbmd0aCkge1xuICB2YXIgc2lnbiA9IG51bWJlciA8IDAgPyAnLScgOiAnJztcbiAgdmFyIG91dHB1dCA9IE1hdGguYWJzKG51bWJlcikudG9TdHJpbmcoKTtcbiAgd2hpbGUgKG91dHB1dC5sZW5ndGggPCB0YXJnZXRMZW5ndGgpIHtcbiAgICBvdXRwdXQgPSAnMCcgKyBvdXRwdXQ7XG4gIH1cbiAgcmV0dXJuIHNpZ24gKyBvdXRwdXQ7XG59IiwgImltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKi9cbnZhciBmb3JtYXR0ZXJzID0ge1xuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4pIHtcbiAgICAvLyBGcm9tIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtMzEvdHIzNS1kYXRlcy5odG1sI0RhdGVfRm9ybWF0X3Rva2Vuc1xuICAgIC8vIHwgWWVhciAgICAgfCAgICAgeSB8IHl5IHwgICB5eXkgfCAgeXl5eSB8IHl5eXl5IHxcbiAgICAvLyB8LS0tLS0tLS0tLXwtLS0tLS0tfC0tLS18LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS18XG4gICAgLy8gfCBBRCAxICAgICB8ICAgICAxIHwgMDEgfCAgIDAwMSB8ICAwMDAxIHwgMDAwMDEgfFxuICAgIC8vIHwgQUQgMTIgICAgfCAgICAxMiB8IDEyIHwgICAwMTIgfCAgMDAxMiB8IDAwMDEyIHxcbiAgICAvLyB8IEFEIDEyMyAgIHwgICAxMjMgfCAyMyB8ICAgMTIzIHwgIDAxMjMgfCAwMDEyMyB8XG4gICAgLy8gfCBBRCAxMjM0ICB8ICAxMjM0IHwgMzQgfCAgMTIzNCB8ICAxMjM0IHwgMDEyMzQgfFxuICAgIC8vIHwgQUQgMTIzNDUgfCAxMjM0NSB8IDQ1IHwgMTIzNDUgfCAxMjM0NSB8IDEyMzQ1IHxcblxuICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRva2VuID09PSAneXknID8geWVhciAlIDEwMCA6IHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSAnTScgPyBTdHJpbmcobW9udGggKyAxKSA6IGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDRGF0ZSgpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0VVRDSG91cnMoKSAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTtcbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gJ2FtJyA/ICdhLm0uJyA6ICdwLm0uJztcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ01pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHZhciBudW1iZXJPZkRpZ2l0cyA9IHRva2VuLmxlbmd0aDtcbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgICB2YXIgZnJhY3Rpb25hbFNlY29uZHMgPSBNYXRoLmZsb29yKG1pbGxpc2Vjb25kcyAqIE1hdGgucG93KDEwLCBudW1iZXJPZkRpZ2l0cyAtIDMpKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGZyYWN0aW9uYWxTZWNvbmRzLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAiaW1wb3J0IGdldFVUQ0RheU9mWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENEYXlPZlllYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENJU09XZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbmltcG9ydCBsaWdodEZvcm1hdHRlcnMgZnJvbSBcIi4uL2xpZ2h0Rm9ybWF0dGVycy9pbmRleC5qc1wiO1xudmFyIGRheVBlcmlvZEVudW0gPSB7XG4gIGFtOiAnYW0nLFxuICBwbTogJ3BtJyxcbiAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gIG5vb246ICdub29uJyxcbiAgbW9ybmluZzogJ21vcm5pbmcnLFxuICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICBldmVuaW5nOiAnZXZlbmluZycsXG4gIG5pZ2h0OiAnbmlnaHQnXG59O1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgTWlsbGlzZWNvbmRzIGluIGRheSAgICAgICAgICAgIHxcbiAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAqIHwgIGMgIHwgU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsgIHwgIEMqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGYgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEYqIHwgRGF5IG9mIHdlZWsgaW4gbW9udGggICAgICAgICAgIHxcbiAqIHwgIGcqIHwgTW9kaWZpZWQgSnVsaWFuIGRheSAgICAgICAgICAgIHwgIEcgIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGkhIHwgSVNPIGRheSBvZiB3ZWVrICAgICAgICAgICAgICAgIHwgIEkhIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgIHxcbiAqIHwgIGoqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHwgIEoqIHwgTG9jYWxpemVkIGhvdXIgdy9vIGRheSBwZXJpb2QgIHxcbiAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGwqIHwgKGRlcHJlY2F0ZWQpICAgICAgICAgICAgICAgICAgIHwgIEwgIHwgU3RhbmQtYWxvbmUgbW9udGggICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG8hIHwgT3JkaW5hbCBudW1iZXIgbW9kaWZpZXIgICAgICAgIHwgIE8gIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHAhIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgIHwgIFAhIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgIHxcbiAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHIqIHwgUmVsYXRlZCBHcmVnb3JpYW4geWVhciAgICAgICAgIHwgIFIhIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAqIHwgIHUgIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgIHwgIFUqIHwgQ3ljbGljIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHYqIHwgVGltZXpvbmUgKGdlbmVyaWMgbm9uLWxvY2F0LikgIHwgIFYqIHwgVGltZXpvbmUgKGxvY2F0aW9uKSAgICAgICAgICAgIHxcbiAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHggIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgIHwgIFggIHwgVGltZXpvbmUgKElTTy04NjAxKSAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgIHxcbiAqIHwgIHogIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgISBhcmUgbm9uLXN0YW5kYXJkLCBidXQgaW1wbGVtZW50ZWQgYnkgZGF0ZS1mbnM6XG4gKiAtIGBvYCBtb2RpZmllcyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gdHVybiBpdCBpbnRvIGFuIG9yZGluYWwgKHNlZSBgZm9ybWF0YCBkb2NzKVxuICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICogICBpLmUuIDcgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gKiAtIGBJYCBpcyBJU08gd2VlayBvZiB5ZWFyLCBhcyBvcHBvc2VkIHRvIGB3YCB3aGljaCBpcyBsb2NhbCB3ZWVrIG9mIHllYXIuXG4gKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqICAgYFJgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSWAgYW5kIGBpYFxuICogICBmb3IgdW5pdmVyc2FsIElTTyB3ZWVrLW51bWJlcmluZyBkYXRlLCB3aGVyZWFzXG4gKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAqICAgZm9yIHdlZWstbnVtYmVyaW5nIGRhdGUgc3BlY2lmaWMgdG8gdGhlIGxvY2FsZS5cbiAqIC0gYFBgIGlzIGxvbmcgbG9jYWxpemVkIGRhdGUgZm9ybWF0XG4gKiAtIGBwYCBpcyBsb25nIGxvY2FsaXplZCB0aW1lIGZvcm1hdFxuICovXG5cbnZhciBmb3JtYXR0ZXJzID0ge1xuICAvLyBFcmFcbiAgRzogZnVuY3Rpb24gRyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZXJhID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpID4gMCA/IDEgOiAwO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEFELCBCQ1xuICAgICAgY2FzZSAnRyc6XG4gICAgICBjYXNlICdHRyc6XG4gICAgICBjYXNlICdHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQSwgQlxuICAgICAgY2FzZSAnR0dHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93J1xuICAgICAgICB9KTtcbiAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0XG4gICAgICBjYXNlICdHR0dHJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ3lvJykge1xuICAgICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHllYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICBZOiBmdW5jdGlvbiBZKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBzaWduZWRXZWVrWWVhciA9IGdldFVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgdmFyIHdlZWtZZWFyID0gc2lnbmVkV2Vla1llYXIgPiAwID8gc2lnbmVkV2Vla1llYXIgOiAxIC0gc2lnbmVkV2Vla1llYXI7XG5cbiAgICAvLyBUd28gZGlnaXQgeWVhclxuICAgIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgICAgdmFyIHR3b0RpZ2l0WWVhciA9IHdlZWtZZWFyICUgMTAwO1xuICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0d29EaWdpdFllYXIsIDIpO1xuICAgIH1cblxuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAnWW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrWWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICBSOiBmdW5jdGlvbiBSKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGlzb1dlZWtZZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGF0ZSk7XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRXh0ZW5kZWQgeWVhci4gVGhpcyBpcyBhIHNpbmdsZSBudW1iZXIgZGVzaWduYXRpbmcgdGhlIHllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0uXG4gIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBsb2NhbGl6ZXJzIGFyZSBCLkMuIHllYXJzOlxuICAvLyB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICAvLyB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICAvLyB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICAvLyB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICAvLyB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICAvLyBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gIC8vIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZC5cbiAgdTogZnVuY3Rpb24gdShkYXRlLCB0b2tlbikge1xuICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gUXVhcnRlclxuICBROiBmdW5jdGlvbiBRKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ1EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ1FRJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAnUW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ1FRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ1FRUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAnUVFRUSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBxdWFydGVyXG4gIHE6IGZ1bmN0aW9uIHEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAncSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAncXEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdxbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAncXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAncXFxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdxcXFxJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ00nOlxuICAgICAgY2FzZSAnTU0nOlxuICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLk0oZGF0ZSwgdG9rZW4pO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdNTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ01NTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdNTU1NJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgbW9udGhcbiAgTDogZnVuY3Rpb24gTChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTEwnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdMbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ0xMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTExMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ0xMTEwnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCB3ZWVrIG9mIHllYXJcbiAgdzogZnVuY3Rpb24gdyhkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2VlayA9IGdldFVUQ1dlZWsoZGF0ZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRva2VuID09PSAnd28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWsgb2YgeWVhclxuICBJOiBmdW5jdGlvbiBJKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBpc29XZWVrID0gZ2V0VVRDSVNPV2VlayhkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdJbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb1dlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnZG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0RhdGUoKSwge1xuICAgICAgICB1bml0OiAnZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBEYXkgb2YgeWVhclxuICBEOiBmdW5jdGlvbiBEKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZlllYXIgPSBnZXRVVENEYXlPZlllYXIoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnRG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXlPZlllYXIsIHtcbiAgICAgICAgdW5pdDogJ2RheU9mWWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRheU9mWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHdlZWtcbiAgRTogZnVuY3Rpb24gRShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ0UnOlxuICAgICAgY2FzZSAnRUUnOlxuICAgICAgY2FzZSAnRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdFRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ0VFRUUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIGRheSBvZiB3ZWVrXG4gIGU6IGZ1bmN0aW9uIGUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pXG4gICAgICBjYXNlICdlJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdlZSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlICdlbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2VlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2VlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnZWVlZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWtcbiAgYzogZnVuY3Rpb24gYyhkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKVxuICAgICAgY2FzZSAnYyc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnY2MnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlICdjbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2NjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnY2NjYyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uIGkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMlxuICAgICAgY2FzZSAnaSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTtcbiAgICAgIC8vIDAyXG4gICAgICBjYXNlICdpaSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMm5kXG4gICAgICBjYXNlICdpbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb0RheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2lpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2lpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnaWlpaSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNLCBQTSwgbWlkbmlnaHQsIG5vb25cbiAgYjogZnVuY3Rpb24gYihkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPT09IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA9PT0gMCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5taWRuaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2InOlxuICAgICAgY2FzZSAnYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2JiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlICdiYmJiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2JiYmInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHRcbiAgQjogZnVuY3Rpb24gQihkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPj0gMTcpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uZXZlbmluZztcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmFmdGVybm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDQpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubW9ybmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5uaWdodDtcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnQic6XG4gICAgICBjYXNlICdCQic6XG4gICAgICBjYXNlICdCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdobycpIHtcbiAgICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdIbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDSG91cnMoKSwge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLkgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTExXVxuICBLOiBmdW5jdGlvbiBLKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgIGlmICh0b2tlbiA9PT0gJ0tvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24gayhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDI0O1xuICAgIGlmICh0b2tlbiA9PT0gJ2tvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnbW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ01pbnV0ZXMoKSwge1xuICAgICAgICB1bml0OiAnbWludXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMubShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ3NvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHtcbiAgICAgICAgdW5pdDogJ3NlY29uZCdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuUyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApXG4gIFg6IGZ1bmN0aW9uIFgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZiAodGltZXpvbmVPZmZzZXQgPT09IDApIHtcbiAgICAgIHJldHVybiAnWic7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICdYJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYYFxuICAgICAgY2FzZSAnWFhYWCc6XG4gICAgICBjYXNlICdYWCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWFhgXG4gICAgICBjYXNlICdYWFhYWCc6XG4gICAgICBjYXNlICdYWFgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpXG4gIHg6IGZ1bmN0aW9uIHgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAneCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eGBcbiAgICAgIGNhc2UgJ3h4eHgnOlxuICAgICAgY2FzZSAneHgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHh4YFxuICAgICAgY2FzZSAneHh4eHgnOlxuICAgICAgY2FzZSAneHh4JzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoR01UKVxuICBPOiBmdW5jdGlvbiBPKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ08nOlxuICAgICAgY2FzZSAnT08nOlxuICAgICAgY2FzZSAnT09PJzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgJ09PT08nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0aW9uKVxuICB6OiBmdW5jdGlvbiB6KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ3onOlxuICAgICAgY2FzZSAnenonOlxuICAgICAgY2FzZSAnenp6JzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgJ3p6enonOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBTZWNvbmRzIHRpbWVzdGFtcFxuICB0OiBmdW5jdGlvbiB0KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IE1hdGguZmxvb3Iob3JpZ2luYWxEYXRlLmdldFRpbWUoKSAvIDEwMDApO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gIFQ6IGZ1bmN0aW9uIFQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gb3JpZ2luYWxEYXRlLmdldFRpbWUoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lU2hvcnQob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKTtcbiAgdmFyIG1pbnV0ZXMgPSBhYnNPZmZzZXQgJSA2MDtcbiAgaWYgKG1pbnV0ZXMgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiArIFN0cmluZyhob3Vycyk7XG4gIH1cbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICByZXR1cm4gc2lnbiArIFN0cmluZyhob3VycykgKyBkZWxpbWl0ZXIgKyBhZGRMZWFkaW5nWmVyb3MobWludXRlcywgMik7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICBpZiAob2Zmc2V0ICUgNjAgPT09IDApIHtcbiAgICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gICAgcmV0dXJuIHNpZ24gKyBhZGRMZWFkaW5nWmVyb3MoTWF0aC5hYnMob2Zmc2V0KSAvIDYwLCAyKTtcbiAgfVxuICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcik7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApLCAyKTtcbiAgdmFyIG1pbnV0ZXMgPSBhZGRMZWFkaW5nWmVyb3MoYWJzT2Zmc2V0ICUgNjAsIDIpO1xuICByZXR1cm4gc2lnbiArIGhvdXJzICsgZGVsaW1pdGVyICsgbWludXRlcztcbn1cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgInZhciBkYXRlTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcbnZhciB0aW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIHRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAncCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwcCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcbnZhciBkYXRlVGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlVGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICB2YXIgbWF0Y2hSZXN1bHQgPSBwYXR0ZXJuLm1hdGNoKC8oUCspKHArKT8vKSB8fCBbXTtcbiAgdmFyIGRhdGVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMV07XG4gIHZhciB0aW1lUGF0dGVybiA9IG1hdGNoUmVzdWx0WzJdO1xuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG4gIHZhciBkYXRlVGltZUZvcm1hdDtcbiAgc3dpdGNoIChkYXRlUGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCd7e2RhdGV9fScsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nKSkucmVwbGFjZSgne3t0aW1lfX0nLCB0aW1lTG9uZ0Zvcm1hdHRlcih0aW1lUGF0dGVybiwgZm9ybWF0TG9uZykpO1xufTtcbnZhciBsb25nRm9ybWF0dGVycyA9IHtcbiAgcDogdGltZUxvbmdGb3JtYXR0ZXIsXG4gIFA6IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlclxufTtcbmV4cG9ydCBkZWZhdWx0IGxvbmdGb3JtYXR0ZXJzOyIsICIvKipcbiAqIEdvb2dsZSBDaHJvbWUgYXMgb2YgNjcuMC4zMzk2Ljg3IGludHJvZHVjZWQgdGltZXpvbmVzIHdpdGggb2Zmc2V0IHRoYXQgaW5jbHVkZXMgc2Vjb25kcy5cbiAqIFRoZXkgdXN1YWxseSBhcHBlYXIgZm9yIGRhdGVzIHRoYXQgZGVub3RlIHRpbWUgYmVmb3JlIHRoZSB0aW1lem9uZXMgd2VyZSBpbnRyb2R1Y2VkXG4gKiAoZS5nLiBmb3IgJ0V1cm9wZS9QcmFndWUnIHRpbWV6b25lIHRoZSBvZmZzZXQgaXMgR01UKzAwOjU3OjQ0IGJlZm9yZSAxIE9jdG9iZXIgMTg5MVxuICogYW5kIEdNVCswMTowMDowMCBhZnRlciB0aGF0IGRhdGUpXG4gKlxuICogRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIHRoZSBvZmZzZXQgaW4gbWludXRlcyBhbmQgd291bGQgcmV0dXJuIDU3IGZvciB0aGUgZXhhbXBsZSBhYm92ZSxcbiAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWV6b25lIG9mZnNldCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0YWtlcyBzZWNvbmRzIGluIGFjY291bnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkge1xuICB2YXIgdXRjRGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCksIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpKTtcbiAgdXRjRGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgLSB1dGNEYXRlLmdldFRpbWUoKTtcbn0iLCAidmFyIHByb3RlY3RlZERheU9mWWVhclRva2VucyA9IFsnRCcsICdERCddO1xudmFyIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zID0gWydZWScsICdZWVlZJ107XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGlmICh0b2tlbiA9PT0gJ1lZWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0QnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRgIGluc3RlYWQgb2YgYERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0REJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfVxufSIsICJ2YXIgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBzZWNvbmQnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICB4U2Vjb25kczoge1xuICAgIG9uZTogJzEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICBoYWxmQU1pbnV0ZTogJ2hhbGYgYSBtaW51dGUnLFxuICBsZXNzVGhhblhNaW51dGVzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgbWludXRlJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6ICcxIG1pbnV0ZScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgYWJvdXRYSG91cnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIGhvdXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4SG91cnM6IHtcbiAgICBvbmU6ICcxIGhvdXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4RGF5czoge1xuICAgIG9uZTogJzEgZGF5JyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBkYXlzJ1xuICB9LFxuICBhYm91dFhXZWVrczoge1xuICAgIG9uZTogJ2Fib3V0IDEgd2VlaycsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIHhXZWVrczoge1xuICAgIG9uZTogJzEgd2VlaycsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogJ2Fib3V0IDEgbW9udGgnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgeE1vbnRoczoge1xuICAgIG9uZTogJzEgbW9udGgnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIHllYXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICB4WWVhcnM6IHtcbiAgICBvbmU6ICcxIHllYXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBvdmVyWFllYXJzOiB7XG4gICAgb25lOiAnb3ZlciAxIHllYXInLFxuICAgIG90aGVyOiAnb3ZlciB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIGFsbW9zdFhZZWFyczoge1xuICAgIG9uZTogJ2FsbW9zdCAxIHllYXInLFxuICAgIG90aGVyOiAnYWxtb3N0IHt7Y291bnR9fSB5ZWFycydcbiAgfVxufTtcbnZhciBmb3JtYXREaXN0YW5jZSA9IGZ1bmN0aW9uIGZvcm1hdERpc3RhbmNlKHRva2VuLCBjb3VudCwgb3B0aW9ucykge1xuICB2YXIgcmVzdWx0O1xuICB2YXIgdG9rZW5WYWx1ZSA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXTtcbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWU7XG4gIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm9uZTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm90aGVyLnJlcGxhY2UoJ3t7Y291bnR9fScsIGNvdW50LnRvU3RyaW5nKCkpO1xuICB9XG4gIGlmIChvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLmFkZFN1ZmZpeCkge1xuICAgIGlmIChvcHRpb25zLmNvbXBhcmlzb24gJiYgb3B0aW9ucy5jb21wYXJpc29uID4gMCkge1xuICAgICAgcmV0dXJuICdpbiAnICsgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgJyBhZ28nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdERpc3RhbmNlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZvcm1hdExvbmdGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIC8vIFRPRE86IFJlbW92ZSBTdHJpbmcoKVxuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICB2YXIgZm9ybWF0ID0gYXJncy5mb3JtYXRzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHNbYXJncy5kZWZhdWx0V2lkdGhdO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH07XG59IiwgImltcG9ydCBidWlsZEZvcm1hdExvbmdGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZEZvcm1hdExvbmdGbi9pbmRleC5qc1wiO1xudmFyIGRhdGVGb3JtYXRzID0ge1xuICBmdWxsOiAnRUVFRSwgTU1NTSBkbywgeScsXG4gIGxvbmc6ICdNTU1NIGRvLCB5JyxcbiAgbWVkaXVtOiAnTU1NIGQsIHknLFxuICBzaG9ydDogJ01NL2RkL3l5eXknXG59O1xudmFyIHRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiAnaDptbTpzcyBhIHp6enonLFxuICBsb25nOiAnaDptbTpzcyBhIHonLFxuICBtZWRpdW06ICdoOm1tOnNzIGEnLFxuICBzaG9ydDogJ2g6bW0gYSdcbn07XG52YXIgZGF0ZVRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbG9uZzogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIG1lZGl1bTogJ3t7ZGF0ZX19LCB7e3RpbWV9fScsXG4gIHNob3J0OiAne3tkYXRlfX0sIHt7dGltZX19J1xufTtcbnZhciBmb3JtYXRMb25nID0ge1xuICBkYXRlOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIHRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiB0aW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgZGF0ZVRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlVGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRMb25nOyIsICJ2YXIgZm9ybWF0UmVsYXRpdmVMb2NhbGUgPSB7XG4gIGxhc3RXZWVrOiBcIidsYXN0JyBlZWVlICdhdCcgcFwiLFxuICB5ZXN0ZXJkYXk6IFwiJ3llc3RlcmRheSBhdCcgcFwiLFxuICB0b2RheTogXCIndG9kYXkgYXQnIHBcIixcbiAgdG9tb3Jyb3c6IFwiJ3RvbW9ycm93IGF0JyBwXCIsXG4gIG5leHRXZWVrOiBcImVlZWUgJ2F0JyBwXCIsXG4gIG90aGVyOiAnUCdcbn07XG52YXIgZm9ybWF0UmVsYXRpdmUgPSBmdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZSh0b2tlbiwgX2RhdGUsIF9iYXNlRGF0ZSwgX29wdGlvbnMpIHtcbiAgcmV0dXJuIGZvcm1hdFJlbGF0aXZlTG9jYWxlW3Rva2VuXTtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRSZWxhdGl2ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRMb2NhbGl6ZUZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkaXJ0eUluZGV4LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLmNvbnRleHQgPyBTdHJpbmcob3B0aW9ucy5jb250ZXh0KSA6ICdzdGFuZGFsb25lJztcbiAgICB2YXIgdmFsdWVzQXJyYXk7XG4gICAgaWYgKGNvbnRleHQgPT09ICdmb3JtYXR0aW5nJyAmJiBhcmdzLmZvcm1hdHRpbmdWYWx1ZXMpIHtcbiAgICAgIHZhciBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRGb3JtYXR0aW5nV2lkdGggfHwgYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2RlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIF93aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy52YWx1ZXNbX3dpZHRoXSB8fCBhcmdzLnZhbHVlc1tfZGVmYXVsdFdpZHRoXTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gYXJncy5hcmd1bWVudENhbGxiYWNrID8gYXJncy5hcmd1bWVudENhbGxiYWNrKGRpcnR5SW5kZXgpIDogZGlydHlJbmRleDtcbiAgICAvLyBAdHMtaWdub3JlOiBGb3Igc29tZSByZWFzb24gVHlwZVNjcmlwdCBqdXN0IGRvbid0IHdhbnQgdG8gbWF0Y2ggaXQsIG5vIG1hdHRlciBob3cgaGFyZCB3ZSB0cnkuIEkgY2hhbGxlbmdlIHlvdSB0byB0cnkgdG8gcmVtb3ZlIGl0IVxuICAgIHJldHVybiB2YWx1ZXNBcnJheVtpbmRleF07XG4gIH07XG59IiwgImltcG9ydCBidWlsZExvY2FsaXplRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRMb2NhbGl6ZUZuL2luZGV4LmpzXCI7XG52YXIgZXJhVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnQicsICdBJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0JDJywgJ0FEJ10sXG4gIHdpZGU6IFsnQmVmb3JlIENocmlzdCcsICdBbm5vIERvbWluaSddXG59O1xudmFyIHF1YXJ0ZXJWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWycxJywgJzInLCAnMycsICc0J10sXG4gIGFiYnJldmlhdGVkOiBbJ1ExJywgJ1EyJywgJ1EzJywgJ1E0J10sXG4gIHdpZGU6IFsnMXN0IHF1YXJ0ZXInLCAnMm5kIHF1YXJ0ZXInLCAnM3JkIHF1YXJ0ZXInLCAnNHRoIHF1YXJ0ZXInXVxufTtcblxuLy8gTm90ZTogaW4gRW5nbGlzaCwgdGhlIG5hbWVzIG9mIGRheXMgb2YgdGhlIHdlZWsgYW5kIG1vbnRocyBhcmUgY2FwaXRhbGl6ZWQuXG4vLyBJZiB5b3UgYXJlIG1ha2luZyBhIG5ldyBsb2NhbGUgYmFzZWQgb24gdGhpcyBvbmUsIGNoZWNrIGlmIHRoZSBzYW1lIGlzIHRydWUgZm9yIHRoZSBsYW5ndWFnZSB5b3UncmUgd29ya2luZyBvbi5cbi8vIEdlbmVyYWxseSwgZm9ybWF0dGVkIGRhdGVzIHNob3VsZCBsb29rIGxpa2UgdGhleSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHNlbnRlbmNlLFxuLy8gZS5nLiBpbiBTcGFuaXNoIGxhbmd1YWdlIHRoZSB3ZWVrZGF5cyBhbmQgbW9udGhzIHNob3VsZCBiZSBpbiB0aGUgbG93ZXJjYXNlLlxudmFyIG1vbnRoVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnSicsICdGJywgJ00nLCAnQScsICdNJywgJ0onLCAnSicsICdBJywgJ1MnLCAnTycsICdOJywgJ0QnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcbiAgd2lkZTogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ11cbn07XG52YXIgZGF5VmFsdWVzID0ge1xuICBuYXJyb3c6IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddLFxuICBzaG9ydDogWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddLFxuICBhYmJyZXZpYXRlZDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcbiAgd2lkZTogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddXG59O1xudmFyIGRheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9XG59O1xudmFyIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfVxufTtcbnZhciBvcmRpbmFsTnVtYmVyID0gZnVuY3Rpb24gb3JkaW5hbE51bWJlcihkaXJ0eU51bWJlciwgX29wdGlvbnMpIHtcbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgLy8gSWYgb3JkaW5hbCBudW1iZXJzIGRlcGVuZCBvbiBjb250ZXh0LCBmb3IgZXhhbXBsZSxcbiAgLy8gaWYgdGhleSBhcmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgZ3JhbW1hdGljYWwgZ2VuZGVycyxcbiAgLy8gdXNlIGBvcHRpb25zLnVuaXRgLlxuICAvL1xuICAvLyBgdW5pdGAgY2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXRlJywgJ2RheU9mWWVhcicsXG4gIC8vICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJy5cblxuICB2YXIgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuICBpZiAocmVtMTAwID4gMjAgfHwgcmVtMTAwIDwgMTApIHtcbiAgICBzd2l0Y2ggKHJlbTEwMCAlIDEwKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnc3QnO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ25kJztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdyZCc7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW1iZXIgKyAndGgnO1xufTtcbnZhciBsb2NhbGl6ZSA9IHtcbiAgb3JkaW5hbE51bWJlcjogb3JkaW5hbE51bWJlcixcbiAgZXJhOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZXJhVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogcXVhcnRlclZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJyxcbiAgICBhcmd1bWVudENhbGxiYWNrOiBmdW5jdGlvbiBhcmd1bWVudENhbGxiYWNrKHF1YXJ0ZXIpIHtcbiAgICAgIHJldHVybiBxdWFydGVyIC0gMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXk6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJyxcbiAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6ICd3aWRlJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsaXplOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoO1xuICAgIHZhciBtYXRjaFBhdHRlcm4gPSB3aWR0aCAmJiBhcmdzLm1hdGNoUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MubWF0Y2hQYXR0ZXJuc1thcmdzLmRlZmF1bHRNYXRjaFdpZHRoXTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2gobWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VQYXR0ZXJucyA9IHdpZHRoICYmIGFyZ3MucGFyc2VQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5wYXJzZVBhdHRlcm5zW2FyZ3MuZGVmYXVsdFBhcnNlV2lkdGhdO1xuICAgIHZhciBrZXkgPSBBcnJheS5pc0FycmF5KHBhcnNlUGF0dGVybnMpID8gZmluZEluZGV4KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pIDogZmluZEtleShwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KTtcbiAgICB2YXIgdmFsdWU7XG4gICAgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2soa2V5KSA6IGtleTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufVxuZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHByZWRpY2F0ZShvYmplY3Rba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBrZXkgPSAwOyBrZXkgPCBhcnJheS5sZW5ndGg7IGtleSsrKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhwYXJzZVJlc3VsdFswXSkgOiBwYXJzZVJlc3VsdFswXTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRNYXRjaEZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qc1wiO1xuaW1wb3J0IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi9pbmRleC5qc1wiO1xudmFyIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcXGQrKSh0aHxzdHxuZHxyZCk/L2k7XG52YXIgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9cXGQrL2k7XG52YXIgbWF0Y2hFcmFQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihifGEpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihiXFwuP1xccz9jXFwuP3xiXFwuP1xccz9jXFwuP1xccz9lXFwuP3xhXFwuP1xccz9kXFwuP3xjXFwuP1xccz9lXFwuPykvaSxcbiAgd2lkZTogL14oYmVmb3JlIGNocmlzdHxiZWZvcmUgY29tbW9uIGVyYXxhbm5vIGRvbWluaXxjb21tb24gZXJhKS9pXG59O1xudmFyIHBhcnNlRXJhUGF0dGVybnMgPSB7XG4gIGFueTogWy9eYi9pLCAvXihhfGMpL2ldXG59O1xudmFyIG1hdGNoUXVhcnRlclBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eWzEyMzRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXnFbMTIzNF0vaSxcbiAgd2lkZTogL15bMTIzNF0odGh8c3R8bmR8cmQpPyBxdWFydGVyL2lcbn07XG52YXIgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7XG4gIGFueTogWy8xL2ksIC8yL2ksIC8zL2ksIC80L2ldXG59O1xudmFyIG1hdGNoTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltqZm1hc29uZF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLFxuICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pXG59O1xudmFyIHBhcnNlTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15qL2ksIC9eZi9pLCAvXm0vaSwgL15hL2ksIC9ebS9pLCAvXmovaSwgL15qL2ksIC9eYS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV0sXG4gIGFueTogWy9eamEvaSwgL15mL2ksIC9ebWFyL2ksIC9eYXAvaSwgL15tYXkvaSwgL15qdW4vaSwgL15qdWwvaSwgL15hdS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV1cbn07XG52YXIgbWF0Y2hEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltzbXR3Zl0vaSxcbiAgc2hvcnQ6IC9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0KS9pLFxuICB3aWRlOiAvXihzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSkvaVxufTtcbnZhciBwYXJzZURheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXnMvaSwgL15tL2ksIC9edC9pLCAvXncvaSwgL150L2ksIC9eZi9pLCAvXnMvaV0sXG4gIGFueTogWy9ec3UvaSwgL15tL2ksIC9edHUvaSwgL153L2ksIC9edGgvaSwgL15mL2ksIC9ec2EvaV1cbn07XG52YXIgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksXG4gIGFueTogL14oW2FwXVxcLj9cXHM/bVxcLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2lcbn07XG52YXIgcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgYW55OiB7XG4gICAgYW06IC9eYS9pLFxuICAgIHBtOiAvXnAvaSxcbiAgICBtaWRuaWdodDogL15taS9pLFxuICAgIG5vb246IC9ebm8vaSxcbiAgICBtb3JuaW5nOiAvbW9ybmluZy9pLFxuICAgIGFmdGVybm9vbjogL2FmdGVybm9vbi9pLFxuICAgIGV2ZW5pbmc6IC9ldmVuaW5nL2ksXG4gICAgbmlnaHQ6IC9uaWdodC9pXG4gIH1cbn07XG52YXIgbWF0Y2ggPSB7XG4gIG9yZGluYWxOdW1iZXI6IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oe1xuICAgIG1hdGNoUGF0dGVybjogbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICBwYXJzZVBhdHRlcm46IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuICB9KSxcbiAgZXJhOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZUVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55JyxcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggKyAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnYW55JyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IG1hdGNoOyIsICJpbXBvcnQgZm9ybWF0RGlzdGFuY2UgZnJvbSBcIi4vX2xpYi9mb3JtYXREaXN0YW5jZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdExvbmcgZnJvbSBcIi4vX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0UmVsYXRpdmUgZnJvbSBcIi4vX2xpYi9mb3JtYXRSZWxhdGl2ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGxvY2FsaXplIGZyb20gXCIuL19saWIvbG9jYWxpemUvaW5kZXguanNcIjtcbmltcG9ydCBtYXRjaCBmcm9tIFwiLi9fbGliL21hdGNoL2luZGV4LmpzXCI7XG4vKipcbiAqIEB0eXBlIHtMb2NhbGV9XG4gKiBAY2F0ZWdvcnkgTG9jYWxlc1xuICogQHN1bW1hcnkgRW5nbGlzaCBsb2NhbGUgKFVuaXRlZCBTdGF0ZXMpLlxuICogQGxhbmd1YWdlIEVuZ2xpc2hcbiAqIEBpc28tNjM5LTIgZW5nXG4gKiBAYXV0aG9yIFNhc2hhIEtvc3MgW0Brb3Nzbm9jb3JwXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20va29zc25vY29ycH1cbiAqIEBhdXRob3IgTGVzaGEgS29zcyBbQGxlc2hha29zc117QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xlc2hha29zc31cbiAqL1xudmFyIGxvY2FsZSA9IHtcbiAgY29kZTogJ2VuLVVTJyxcbiAgZm9ybWF0RGlzdGFuY2U6IGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXRMb25nOiBmb3JtYXRMb25nLFxuICBmb3JtYXRSZWxhdGl2ZTogZm9ybWF0UmVsYXRpdmUsXG4gIGxvY2FsaXplOiBsb2NhbGl6ZSxcbiAgbWF0Y2g6IG1hdGNoLFxuICBvcHRpb25zOiB7XG4gICAgd2Vla1N0YXJ0c09uOiAwIC8qIFN1bmRheSAqLyxcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDFcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsZTsiLCAiaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uLy4uL2xvY2FsZS9lbi1VUy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdExvY2FsZTsiLCAiaW1wb3J0IGlzVmFsaWQgZnJvbSBcIi4uL2lzVmFsaWQvaW5kZXguanNcIjtcbmltcG9ydCBzdWJNaWxsaXNlY29uZHMgZnJvbSBcIi4uL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvZm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGxvbmdGb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbiwgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuLCB0aHJvd1Byb3RlY3RlZEVycm9yIH0gZnJvbSBcIi4uL19saWIvcHJvdGVjdGVkVG9rZW5zL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi9fbGliL2RlZmF1bHRMb2NhbGUvaW5kZXguanNcIjsgLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG52YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcXHcpXFwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuLy8gVGhpcyBSZWdFeHAgY2F0Y2hlcyBzeW1ib2xzIGVzY2FwZWQgYnkgcXVvdGVzLCBhbmQgYWxzb1xuLy8gc2VxdWVuY2VzIG9mIHN5bWJvbHMgUCwgcCwgYW5kIHRoZSBjb21iaW5hdGlvbnMgbGlrZSBgUFBQUFBQUHBwcHBwYFxudmFyIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG52YXIgZXNjYXBlZFN0cmluZ1JlZ0V4cCA9IC9eJyhbXl0qPyknPyQvO1xudmFyIGRvdWJsZVF1b3RlUmVnRXhwID0gLycnL2c7XG52YXIgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vO1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXQgdGhlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LiBUaGUgcmVzdWx0IG1heSB2YXJ5IGJ5IGxvY2FsZS5cbiAqXG4gKiA+IFx1MjZBMFx1RkUwRiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBgZm9ybWF0YCB0b2tlbnMgZGlmZmVyIGZyb20gTW9tZW50LmpzIGFuZCBvdGhlciBsaWJyYXJpZXMuXG4gKiA+IFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIFRoZSBjaGFyYWN0ZXJzIHdyYXBwZWQgYmV0d2VlbiB0d28gc2luZ2xlIHF1b3RlcyBjaGFyYWN0ZXJzICgnKSBhcmUgZXNjYXBlZC5cbiAqIFR3byBzaW5nbGUgcXVvdGVzIGluIGEgcm93LCB3aGV0aGVyIGluc2lkZSBvciBvdXRzaWRlIGEgcXVvdGVkIHNlcXVlbmNlLCByZXByZXNlbnQgYSAncmVhbCcgc2luZ2xlIHF1b3RlLlxuICogKHNlZSB0aGUgbGFzdCBleGFtcGxlKVxuICpcbiAqIEZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGJhc2VkIG9uIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGVcbiAqIHdpdGggYSBmZXcgYWRkaXRpb25zIChzZWUgbm90ZSA3IGJlbG93IHRoZSB0YWJsZSkuXG4gKlxuICogQWNjZXB0ZWQgcGF0dGVybnM6XG4gKiB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXR0ZXJuIHwgUmVzdWx0IGV4YW1wbGVzICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLXxcbiAqIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEcuLkdHRyAgfCBBRCwgQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHICAgIHwgQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3QgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHR0cgICB8IEEsIEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ2FsZW5kYXIgeWVhciAgICAgICAgICAgICAgICAgICB8IHkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5byAgICAgIHwgNDR0aCwgMXN0LCAwdGgsIDE3dGggICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5ICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eXkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICB8IFkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZbyAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDIwMTd0aCAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWVkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgICB8IFIgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUiAgICAgIHwgLTQzLCAwMCwgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSICAgICB8IC0wNDMsIDAwMCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlIgICAgfCAtMDA0MywgMDAwMCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSUiAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1LDcgfFxuICogfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgIHwgdSAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1ICAgICAgfCAtNDMsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXUgICAgIHwgLTA0MywgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dSAgICB8IC0wMDQzLCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXV1ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IFF1YXJ0ZXIgKGZvcm1hdHRpbmcpICAgICAgICAgICAgfCBRICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVFRICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IFF1YXJ0ZXIgKHN0YW5kLWFsb25lKSAgICAgICAgICAgfCBxICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXFxICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IE1vbnRoIChmb3JtYXR0aW5nKSAgICAgICAgICAgICAgfCBNICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU0gICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTSAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU1NICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1vbnRoIChzdGFuZC1hbG9uZSkgICAgICAgICAgICAgfCBMICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTEwgICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTCAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTExMICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgfCB3ICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHd3ICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICAgfCBJICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElJICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICAgfCBkICAgICAgIHwgMSwgMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDMxc3QgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRkICAgICAgfCAwMSwgMDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICAgfCBEICAgICAgIHwgMSwgMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDM2NXRoLCAzNjZ0aCAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREICAgICAgfCAwMSwgMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREQgICAgIHwgMDAxLCAwMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRERERCAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgRGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgICAgICB8IEUuLkVFRSAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFRSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgfCBpICAgICAgIHwgMSwgMiwgMywgLi4uLCA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDd0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpICAgICAgfCAwMSwgMDIsIC4uLiwgMDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWkgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaWkgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgNyAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgIHwgZSAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZSAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWVlICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKHN0YW5kLWFsb25lKSB8IGMgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2MgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjYyAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2MgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjYyAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhLi5hYSAgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhICAgICB8IGFtLCBwbSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWEgICAgfCBhLm0uLCBwLm0uICAgICAgICAgICAgICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhYSAgIHwgYSwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgIHwgYi4uYmIgICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYiAgICAgfCBhbSwgcG0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiICAgIHwgYS5tLiwgcC5tLiwgbm9vbiwgbWlkbmlnaHQgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYmIgICB8IGEsIHAsIG4sIG1pICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgICB8IEIuLkJCQiAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCICAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQkIgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgICB8IGggICAgICAgfCAxLCAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBobyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMTJ0aCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGggICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgICB8IEggICAgICAgfCAwLCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIbyAgICAgIHwgMHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEggICAgICB8IDAwLCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgICB8IEsgICAgICAgfCAxLCAyLCAuLi4sIDExLCAwICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMHRoICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS0sgICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgICB8IGsgICAgICAgfCAyNCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrbyAgICAgIHwgMjR0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2sgICAgICB8IDI0LCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICB8IHMgICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3MgICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgICB8IFMgICAgICAgfCAwLCAxLCAuLi4sIDkgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTICAgICB8IDAwMCwgMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTU1MgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3LyBaKSAgICAgICAgfCBYICAgICAgIHwgLTA4LCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFggICAgICB8IC0wODAwLCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWCAgICAgfCAtMDg6MDAsICswNTozMCwgWiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYICAgIHwgLTA4MDAsICswNTMwLCBaLCArMTIzNDU2ICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWFggICB8IC0wODowMCwgKzA1OjMwLCBaLCArMTI6MzQ6NTYgICAgICB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgICB8IHggICAgICAgfCAtMDgsICswNTMwLCArMDAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eCAgICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4ICAgICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHggICAgfCAtMDgwMCwgKzA1MzAsICswMDAwLCArMTIzNDU2ICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4eCAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCwgKzEyOjM0OjU2IHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgIHwgTy4uLk9PTyB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9PT08gICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyICAgICB8XG4gKiB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSAgfCB6Li4uenp6IHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgNiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgenp6eiAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIsNiAgIHxcbiAqIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgICB8IHQgICAgICAgfCA1MTI5Njk1MjAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0dCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgIHwgVCAgICAgICB8IDUxMjk2OTUyMDkwMCAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRUICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICAgfCBQICAgICAgIHwgMDQvMjkvMTQ1MyAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFAgICAgICB8IEFwciAyOSwgMTQ1MyAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUCAgICAgfCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQICAgIHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgIHwgcCAgICAgICB8IDEyOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwICAgICAgfCAxMjowMDowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHAgICAgIHwgMTI6MDA6MDAgQU0gR01UKzIgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwcCAgICB8IDEyOjAwOjAwIEFNIEdNVCswMjowMCAgICAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgQ29tYmluYXRpb24gb2YgZGF0ZSBhbmQgdGltZSAgICB8IFBwICAgICAgfCAwNC8yOS8xNDUzLCAxMjowMCBBTSAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUHBwICAgIHwgQXByIDI5LCAxNDUzLCAxMjowMDowMCBBTSAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQcHBwICB8IEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFBwcHBwfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgfCAyLDcgICB8XG4gKiBOb3RlczpcbiAqIDEuIFwiRm9ybWF0dGluZ1wiIHVuaXRzIChlLmcuIGZvcm1hdHRpbmcgcXVhcnRlcikgaW4gdGhlIGRlZmF1bHQgZW4tVVMgbG9jYWxlXG4gKiAgICBhcmUgdGhlIHNhbWUgYXMgXCJzdGFuZC1hbG9uZVwiIHVuaXRzLCBidXQgYXJlIGRpZmZlcmVudCBpbiBzb21lIGxhbmd1YWdlcy5cbiAqICAgIFwiRm9ybWF0dGluZ1wiIHVuaXRzIGFyZSBkZWNsaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsYW5ndWFnZVxuICogICAgaW4gdGhlIGNvbnRleHQgb2YgYSBkYXRlLiBcIlN0YW5kLWFsb25lXCIgdW5pdHMgYXJlIGFsd2F5cyBub21pbmF0aXZlIHNpbmd1bGFyOlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTExMTCcsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWQnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTU1NTScsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWR1J2BcbiAqXG4gKiAyLiBBbnkgc2VxdWVuY2Ugb2YgdGhlIGlkZW50aWNhbCBsZXR0ZXJzIGlzIGEgcGF0dGVybiwgdW5sZXNzIGl0IGlzIGVzY2FwZWQgYnlcbiAqICAgIHRoZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoc2VlIGJlbG93KS5cbiAqICAgIElmIHRoZSBzZXF1ZW5jZSBpcyBsb25nZXIgdGhhbiBsaXN0ZWQgaW4gdGFibGUgKGUuZy4gYEVFRUVFRUVFRUVFYClcbiAqICAgIHRoZSBvdXRwdXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBkZWZhdWx0IHBhdHRlcm4gZm9yIHRoaXMgdW5pdCwgdXN1YWxseVxuICogICAgdGhlIGxvbmdlc3Qgb25lIChpbiBjYXNlIG9mIElTTyB3ZWVrZGF5cywgYEVFRUVgKS4gRGVmYXVsdCBwYXR0ZXJucyBmb3IgdW5pdHNcbiAqICAgIGFyZSBtYXJrZWQgd2l0aCBcIjJcIiBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NJykgLy89PiAnTm92J2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTScpIC8vPT4gJ04nYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAzLiBTb21lIHBhdHRlcm5zIGNvdWxkIGJlIHVubGltaXRlZCBsZW5ndGggKHN1Y2ggYXMgYHl5eXl5eXl5YCkuXG4gKiAgICBUaGUgb3V0cHV0IHdpbGwgYmUgcGFkZGVkIHdpdGggemVyb3MgdG8gbWF0Y2ggdGhlIGxlbmd0aCBvZiB0aGUgcGF0dGVybi5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ3l5eXl5eXl5JykgLy89PiAnMDAwMDIwMTcnYFxuICpcbiAqIDQuIGBRUVFRUWAgYW5kIGBxcXFxcWAgY291bGQgYmUgbm90IHN0cmljdGx5IG51bWVyaWNhbCBpbiBzb21lIGxvY2FsZXMuXG4gKiAgICBUaGVzZSB0b2tlbnMgcmVwcmVzZW50IHRoZSBzaG9ydGVzdCBmb3JtIG9mIHRoZSBxdWFydGVyLlxuICpcbiAqIDUuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBwYXR0ZXJucyBhcmUgQi5DLiB5ZWFyczpcbiAqXG4gKiAgICB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICogICAgfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAqICAgIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gKiAgICB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICogICAgfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAqXG4gKiAgICBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gKiAgICB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQ6XG4gKlxuICogICAgfCBZZWFyIHwgYHl5YCB8IGB1dWAgfFxuICogICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuICogICAgfCAxICAgIHwgICAwMSB8ICAgMDEgfFxuICogICAgfCAxNCAgIHwgICAxNCB8ICAgMTQgfFxuICogICAgfCAzNzYgIHwgICA3NiB8ICAzNzYgfFxuICogICAgfCAxNDUzIHwgICA1MyB8IDE0NTMgfFxuICpcbiAqICAgIFRoZSBzYW1lIGRpZmZlcmVuY2UgaXMgdHJ1ZSBmb3IgbG9jYWwgYW5kIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyAoYFlgIGFuZCBgUmApLFxuICogICAgZXhjZXB0IGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBkZXBlbmRlbnQgb24gYG9wdGlvbnMud2Vla1N0YXJ0c09uYFxuICogICAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKGNvbXBhcmUgW2dldElTT1dlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldElTT1dlZWtZZWFyfVxuICogICAgYW5kIFtnZXRXZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRXZWVrWWVhcn0pLlxuICpcbiAqIDYuIFNwZWNpZmljIG5vbi1sb2NhdGlvbiB0aW1lem9uZXMgYXJlIGN1cnJlbnRseSB1bmF2YWlsYWJsZSBpbiBgZGF0ZS1mbnNgLFxuICogICAgc28gcmlnaHQgbm93IHRoZXNlIHRva2VucyBmYWxsIGJhY2sgdG8gR01UIHRpbWV6b25lcy5cbiAqXG4gKiA3LiBUaGVzZSBwYXR0ZXJucyBhcmUgbm90IGluIHRoZSBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiAgICAtIGBpYDogSVNPIGRheSBvZiB3ZWVrXG4gKiAgICAtIGBJYDogSVNPIHdlZWsgb2YgeWVhclxuICogICAgLSBgUmA6IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKiAgICAtIGB0YDogc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYFRgOiBtaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBvYDogb3JkaW5hbCBudW1iZXIgbW9kaWZpZXJcbiAqICAgIC0gYFBgOiBsb25nIGxvY2FsaXplZCBkYXRlXG4gKiAgICAtIGBwYDogbG9uZyBsb2NhbGl6ZWQgdGltZVxuICpcbiAqIDguIGBZWWAgYW5kIGBZWVlZYCB0b2tlbnMgcmVwcmVzZW50IHdlZWstbnVtYmVyaW5nIHllYXJzIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIHllYXJzLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogOS4gYERgIGFuZCBgRERgIHRva2VucyByZXByZXNlbnQgZGF5cyBvZiB0aGUgeWVhciBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCBkYXlzIG9mIHRoZSBtb250aC5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgLSB0aGUgc3RyaW5nIG9mIHRva2Vuc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlPTFdIC0gdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpc1xuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyIHRva2VucyBgWVlgIGFuZCBgWVlZWWA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgZGF5IG9mIHllYXIgdG9rZW5zIGBEYCBhbmQgYEREYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgbG9jYWxpemVgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgZm9ybWF0TG9uZ2AgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLndlZWtTdGFydHNPbmAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDZcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDdcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMTEgRmVicnVhcnkgMjAxNCBpbiBtaWRkbGUtZW5kaWFuIGZvcm1hdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCAxLCAxMSksICdNTS9kZC95eXl5JylcbiAqIC8vPT4gJzAyLzExLzIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAyIEp1bHkgMjAxNCBpbiBFc3BlcmFudG86XG4gKiBpbXBvcnQgeyBlb0xvY2FsZSB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbydcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyKSwgXCJkbyAnZGUnIE1NTU0geXl5eVwiLCB7XG4gKiAgIGxvY2FsZTogZW9Mb2NhbGVcbiAqIH0pXG4gKiAvLz0+ICcyLWEgZGUganVsaW8gMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXNjYXBlIHN0cmluZyBieSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyczpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxNSksIFwiaCAnbycnY2xvY2snXCIpXG4gKiAvLz0+IFwiMyBvJ2Nsb2NrXCJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXQoZGlydHlEYXRlLCBkaXJ0eUZvcm1hdFN0ciwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX29wdGlvbnMkbG9jYWxlLCBfcmVmMiwgX3JlZjMsIF9yZWY0LCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZTIsIF9vcHRpb25zJGxvY2FsZTIkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLCBfcmVmNSwgX3JlZjYsIF9yZWY3LCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZTMsIF9vcHRpb25zJGxvY2FsZTMkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMywgX2RlZmF1bHRPcHRpb25zJGxvY2FsNDtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBmb3JtYXRTdHIgPSBTdHJpbmcoZGlydHlGb3JtYXRTdHIpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgbG9jYWxlID0gKF9yZWYgPSAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX29wdGlvbnMkbG9jYWxlICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRsb2NhbGUgOiBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBkZWZhdWx0TG9jYWxlO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmMiA9IChfcmVmMyA9IChfcmVmNCA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTIgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTIub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMiRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUyJG9wdGkuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmNCAhPT0gdm9pZCAwID8gX3JlZjQgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmNSA9IChfcmVmNiA9IChfcmVmNyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTMub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUzJG9wdGkud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNyAhPT0gdm9pZCAwID8gX3JlZjcgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY2ICE9PSB2b2lkIDAgPyBfcmVmNiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsNC53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY1ICE9PSB2b2lkIDAgPyBfcmVmNSA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5sb2NhbGl6ZSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGxvY2FsaXplIHByb3BlcnR5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUuZm9ybWF0TG9uZykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGZvcm1hdExvbmcgcHJvcGVydHknKTtcbiAgfVxuICB2YXIgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIGlmICghaXNWYWxpZChvcmlnaW5hbERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB9XG5cbiAgLy8gQ29udmVydCB0aGUgZGF0ZSBpbiBzeXN0ZW0gdGltZXpvbmUgdG8gdGhlIHNhbWUgZGF0ZSBpbiBVVEMrMDA6MDAgdGltZXpvbmUuXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gVVRDIGZ1bmN0aW9ucyB3aWxsIGJlIGltcGxlbWVudGVkLCBsb2NhbGVzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIHRoZW0uXG4gIC8vIFNlZSBhbiBpc3N1ZSBhYm91dCBVVEMgZnVuY3Rpb25zOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM3NlxuICB2YXIgdGltZXpvbmVPZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSk7XG4gIHZhciB1dGNEYXRlID0gc3ViTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSwgdGltZXpvbmVPZmZzZXQpO1xuICB2YXIgZm9ybWF0dGVyT3B0aW9ucyA9IHtcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSxcbiAgICB3ZWVrU3RhcnRzT246IHdlZWtTdGFydHNPbixcbiAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICBfb3JpZ2luYWxEYXRlOiBvcmlnaW5hbERhdGVcbiAgfTtcbiAgdmFyIHJlc3VsdCA9IGZvcm1hdFN0ci5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSAncCcgfHwgZmlyc3RDaGFyYWN0ZXIgPT09ICdQJykge1xuICAgICAgdmFyIGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJykubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICAvLyBSZXBsYWNlIHR3byBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyB3aXRoIG9uZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyXG4gICAgaWYgKHN1YnN0cmluZyA9PT0gXCInJ1wiKSB7XG4gICAgICByZXR1cm4gXCInXCI7XG4gICAgfVxuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwiJ1wiKSB7XG4gICAgICByZXR1cm4gY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZyk7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXR0ZXIodXRjRGF0ZSwgc3Vic3RyaW5nLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHApKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAnICsgZmlyc3RDaGFyYWN0ZXIgKyAnYCcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkge1xuICB2YXIgbWF0Y2hlZCA9IGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHApO1xuICBpZiAoIW1hdGNoZWQpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgXCInXCIpO1xufSIsICJleHBvcnQgY29uc3QgcG9pbnRzTm90ZU1hanVyaXR5ID0gMTAwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzTWFqdXJpdHkgPSAxMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlID0gNTAwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlID0gMjAwMDtcclxuZXhwb3J0IGNvbnN0IGF2YXRhckluaXRDb250ZW50ID0gIGAjIEF2YXRhclxyXG5cclxufCAgICAgICAgfCAgICAgfFxyXG58IC0tLS0tLSB8IC0tLSB8XHJcbnwgTGV2ZWwgIHwgMCAgICB8XHJcbnwgUG9pbnRzIHwgMCAgICB8XHJcbl5sZXZlbEFuZFBvaW50c1x0XHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFtFeHByaXJpZW5jZV1cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxyXG4gICAgZGF0YTogWzEwMDBdXHJcbnhNaW46IDBcclxueE1heDogMTAwMFxyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDQwJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG5pbmRleEF4aXM6IHlcclxueFRpdGxlOiBcInByb2dyZXNzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tIHxcclxufCAqKmJvb3N0ZXIgZmFjdG9yKiogfCAqKjAqKiB8XHJcbl5ib29zdGVyRmFjdG9yXHJcbnwgICAgICAgICAgICAgfCAgICAgfCAgICAgICB8XHJcbnwgLS0tLS0tLS0tLS0gfCAtLS0gfCAtLS0tLSB8XHJcbnwgKipkYWlseSBOb3RlcyoqIHwgKjUwMEVQKiB8ICoqMC8yKiogfFxyXG5eZGFpbHlOb3Rlc0NoYWxsZW5nZVxyXG58ICB8ICAgICB8fFxyXG58IC0tLS0gfCAtLS0gfCAtLS0gfFxyXG58ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKiowLzcqKiAgIHxcclxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFtOb3Rlc11cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IGRheXMgZG9uZSBpbiBhIHJvd1xyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xyXG4gICAgZGF0YTogWzddXHJcbnhNaW46IDBcclxueE1heDogN1xyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDQwJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG5pbmRleEF4aXM6IHlcclxueFRpdGxlOiBcImRheXNcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCBMZXZlbCB8IENvdW50IHxcclxufCA6LS0tOiB8IDotLS06IHxcclxufCBNYWp1cml0eSA1IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNSwgJzUnLCAnNVx1MjdBMVx1RkUwRicsICc1XHUyQjA3XHVGRTBGJywgJzVcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSA0IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNCwgJzQnLCAnNFx1MjdBMVx1RkUwRicsICc0XHUyQjA3XHVGRTBGJywgJzRcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAzIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMywgJzMnLCAnM1x1MjdBMVx1RkUwRicsICczXHUyQjA3XHVGRTBGJywgJzNcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAyIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMiwgJzInLCAnMlx1MjdBMVx1RkUwRicsICcyXHUyQjA3XHVGRTBGJywgJzJcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAxIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMSwgJzEnLCAnMVx1MjdBMVx1RkUwRicsICcxXHUyQjA3XHVGRTBGJywgJzFcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAwIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMCwgJzAnLCAnMFx1MjdBMVx1RkUwRicsICcwXHUyQjA3XHVGRTBGJywgJzBcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxuXHJcblxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbMCwgMCwgMF1cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IG1vZGlmaWVkXHJcbiAgICBkYXRhOiBbMCwgMCwgMF1cclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA4MCAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbnlUaXRsZTogXCJOdW1iZXIgb2YgTm90ZXNcIlxyXG54VGl0bGU6IFwiTW9udGhzXCJcclxueE1pbjogMFxyXG5cXGBcXGBcXGBcclxuXkNoYXJ0TW9udGhcclxuXHJcblxyXG4jIyMgQmFkZ2VzXHJcbiMjIyMgYWNoaWV2ZWRcclxuXHJcblxyXG4jIyMjIG91dHN0YW5kaW5nXHJcbmxldmVsIDU6ICpFbmxpZ2h0ZW5lZCBOb3ZpY2UqXHJcbmxldmVsIDEwOiAqQ3VyaW91cyBDb25ub2lzc2V1cipcclxubGV2ZWwgMjA6ICpCcmFpbmlhYyBUcmFpbGJsYXplcipcclxubGV2ZWwgMjc6ICpTY2hvbGFybHkgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDM1OiAqSW5mbyBOaW5qYSBNYXN0ZXIqXHJcbmxldmVsIDQyOiAqV2lzZSBPd2wgR3VydSpcclxubGV2ZWwgNTA6ICpFaW5zdGVpbiBJbmNhcm5hdGUqXHJcbmxldmVsIDYwOiAqTWFzdGVybWluZCBTYWdlKlxyXG5sZXZlbCA3NTogKkNlcmVicmFsIE1hZXN0cm8qXHJcbmxldmVsIDgyOiAqWmVuIEtub3dsZWRnZSBLZWVwZXIqXHJcbmxldmVsIDkwOiAqR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkKlxyXG5sZXZlbCAxMDA6ICpPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZypcclxuXHJcblxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDUqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNSBvciBub3RlLW1hdHVyaXR5ID0gXCI1XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNCoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA0IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gM1xyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMyBvciBub3RlLW1hdHVyaXR5ID0gXCIzXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDJcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAxXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAxIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMFxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMCBvciBub3RlLW1hdHVyaXR5ID0gXCIwXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcbmA7XHJcbiIsICJpbXBvcnQgeyBURmlsZSwgQXBwLCB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb24oY2hhckNvdW50VG90YWw6IG51bWJlciwgbGF5ZXIyY291bnQ6IG51bWJlciwgbGF5ZXIzY291bnQ6IG51bWJlcik6IG51bWJlciB7XHJcblx0Y29uc3QgcGVyY2VudExheWVyMiA9IGxheWVyMmNvdW50ICogMTAwIC8gY2hhckNvdW50VG90YWw7XHJcbiAgICBjb25zdCBwZXJjZW50TGF5ZXIzID0gbGF5ZXIzY291bnQgKiAxMDAgLyBsYXllcjJjb3VudDtcclxuXHR2YXIgbGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdHZhciBsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0dmFyIG1hanVyaXR5ID0gMDtcclxuXHRpZiAoY2hhckNvdW50VG90YWwgPCAzMDAwKSB7XHJcblx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBOb3RlIGlzIG5vdCBsb25nIGVub3VnaCB0byBnZXQgaW50byBjYWxjdWxhdGlvbiBmb3IgbWFqdXJpdHkuIFRoZSB0b3RhbCBjaGFyYWN0ZXIgY291bnQgaXMgJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0aWYgKHBlcmNlbnRMYXllcjIgPT0gMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMTApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDIwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAzMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGF5ZXIzY291bnQgPT0gMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMTApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDIwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGF5ZXIybWFqdXJpdHkgPT0gMSAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMTtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gMiAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPj0gMyAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAoKGxheWVyMm1hanVyaXR5ID09IDMgfHwgbGF5ZXIybWFqdXJpdHkgPT0gNCkgJiYgKGxheWVyM21hanVyaXR5ID09IDQgfHwgbGF5ZXIzbWFqdXJpdHkgPT0gNSkpIHtcclxuXHRcdFx0bWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSA1ICYmIGxheWVyM21hanVyaXR5ID09IDUpIHtcclxuXHRcdFx0bWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0XHJcblx0Ly9jb25zb2xlLmxvZyhgbGF5ZXIybWFqdXJpdHk6ICR7bGF5ZXIybWFqdXJpdHl9IFxcdGxheWVyM21hanVyaXR5OiAke2xheWVyM21hanVyaXR5fSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBwZXJjZW50TGF5ZXIyOiAke3BlcmNlbnRMYXllcjJ9IFxcdHBlcmNlbnRMYXllcjM6ICR7cGVyY2VudExheWVyM30gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgY2hhckNvdW50VG90YWw6ICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0cmV0dXJuIG1hanVyaXR5O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZyk6IHsgY2hhckNvdW50OiBudW1iZXI7IGhpZ2hsaWdodGVkQ291bnQ6IG51bWJlcjsgYm9sZENvdW50OiBudW1iZXIgfSB7XHJcbiAgXHJcblx0Y29uc3QgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uID0gZmlsZW5hbWU7IC8vLnNsaWNlKDAsIC1maWxlbmFtZS5sZW5ndGgpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gZm9ybWF0dGluZyBzeW1ib2xzXHJcblx0Y29uc3Qgc3RyaXBwZWRDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9bKl9+YF0vZywgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBoZWFkaW5ncyB0aGF0IG1hdGNoIHRoZSBmaWxlbmFtZVxyXG5cdGNvbnN0IGhlYWRpbmdSZWdleCA9IC9eKCMrKVxccyguKikkL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MgPSBzdHJpcHBlZENvbnRlbnQucmVwbGFjZShoZWFkaW5nUmVnZXgsIChtYXRjaCwgcDEsIHAyKSA9PiB7XHJcblx0XHJcblx0XHQvLyBjb25zb2xlLmxvZyhgcDI6ICR7cDJ9YCk7XHJcblx0XHRpZiAocDIgPT09IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtYXRjaDtcclxuXHR9KTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRIZWFkaW5nczogJHtjb250ZW50V2l0aG91dEhlYWRpbmdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWV0YWRhdGEgYmxvY2tzIGZyb20gY291bnRcclxuXHRjb25zdCBtZXRhZGF0YVJlZ2V4ID0gL14tLS1bXFxzXFxTXSo/LS0tL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEgPSBjb250ZW50V2l0aG91dEhlYWRpbmdzLnJlcGxhY2UobWV0YWRhdGFSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TWV0YWRhdGE6ICR7Y29udGVudFdpdGhvdXRNZXRhZGF0YX1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlICN0YWdzIGZyb20gY291bnRcclxuXHRjb25zdCB0YWdSZWdleCA9IC8jW15cXHNdKy9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0VGFncyA9IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEucmVwbGFjZSh0YWdSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0VGFnczogJHtjb250ZW50V2l0aG91dFRhZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBsaW5rcyBhbmQgV2lraXBlZGlhLWxpbmtzIGZyb20gY291bnRcclxuXHRjb25zdCBsaW5rUmVnZXggPSAvXFxbLio/XFxdXFwoLio/XFwpfFxcW1xcWy4qP1xcXVxcXS9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TGlua3MgPSBjb250ZW50V2l0aG91dFRhZ3MucmVwbGFjZShsaW5rUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dExpbmtzOiAke2NvbnRlbnRXaXRob3V0TGlua3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBibGFuayBuZXdsaW5lc1xyXG5cdGNvbnN0IGZpbHRlcmVkQ29udGVudDogc3RyaW5nID0gY29udGVudFdpdGhvdXRMaW5rc1xyXG5cdC5zcGxpdCgnXFxuJykgLy8gU3BsaXQgdGhlIGNvbnRlbnQgaW50byBhbiBhcnJheSBvZiBsaW5lc1xyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpIC8vIEZpbHRlciBvdXQgbGluZXMgdGhhdCBhcmUgZW1wdHkgb3IgY29udGFpbiBvbmx5IHdoaXRlc3BhY2VcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICctLS0nKSAvLyByZW1vdmUgLS0tIG9uIHNpbmdsZSBsaW5lc1xyXG5cdC5qb2luKCdcXG4nKTsgLy8gSm9pbiB0aGUgcmVtYWluaW5nIGxpbmVzIGJhY2sgaW50byBhIHN0cmluZywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzXHJcblx0Ly8gY29uc29sZS5sb2coYGZpbHRlcmVkQ29udGVudDogJHtmaWx0ZXJlZENvbnRlbnR9YCk7XHJcblxyXG5cdC8vIENvdW50IHRoZSByZW1haW5pbmcgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGNoYXJDb3VudCA9IGZpbHRlcmVkQ29udGVudC5sZW5ndGg7XHJcblx0Ly8gY29uc29sZS5sb2coYGNoYXJDb3VudDogJHtjaGFyQ291bnR9YCk7XHJcblxyXG5cclxuXHQvLyBjYWxjdWxhdGUgTGF5ZXIgMiAmIDMgTGVuZ3RoXHJcblxyXG5cdC8vIENvdW50IHRoZSBoaWdobGlnaHRlZCBhbmQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0bGV0IGhpZ2hsaWdodGVkQ291bnQgPSAwO1xyXG5cdGxldCBib2xkQ291bnQgPSAwO1xyXG4gIFxyXG5cdHZhciBsYXllcjJleGNsdWRlID0gJz0nXHJcblx0dmFyIGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0Ly8gdG8gaGF2ZSB0aGUgcmVnIGV4IGNvcnJlY3QuIG90aGVyd2lzZSBpdCB3aWxsIGdldCBzdHVjIHdpdGggKiouXHJcblx0aWYobGF5ZXIzID09ICcqKicpe1xyXG5cdFx0bGF5ZXIzID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdH1cclxuXHRpZihsYXllcjIgPT0gJyoqJyl7XHJcblx0XHRsYXllcjIgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnPSdcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnXFxcXConXHJcblx0fVxyXG4gIFx0XHJcblxyXG5cdGNvbnN0IGhpZ2hsaWdodFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjJ9W14ke2xheWVyMmV4Y2x1ZGV9XSske2xheWVyMn1gLCBcImdcIik7XHJcbiAgICBjb25zdCBib2xkUmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyM31bXiR7bGF5ZXIzZXhjbHVkZX1dKyR7bGF5ZXIzfWAsIFwiZ1wiKTtcclxuICBcclxuXHQvLyBDb3VudCBoaWdobGlnaHRlZCBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgaGlnaGxpZ2h0ZWRNYXRjaGVzID0gY29udGVudC5tYXRjaChoaWdobGlnaHRSZWdleCk7XHJcblx0aWYgKGhpZ2hsaWdodGVkTWF0Y2hlcykge1xyXG5cdCAgaGlnaGxpZ2h0ZWRDb3VudCA9IGhpZ2hsaWdodGVkTWF0Y2hlcy5qb2luKFwiXCIpLmxlbmd0aCAtIChoaWdobGlnaHRlZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJz09J1xyXG5cdCAgLy8gZmlyc3QgdGFrZSB0aGUgbGF5ZXIyIChoaWdobGlnaHRlZENvdW50KSBhbmQgcnVuIG9uIHRoaXMgdGhlICdib2xkUmVnZXgnXHJcblx0ICAvLyBDb3VudCBib2xkIGNoYXJhY3RlcnNcclxuXHQgIGNvbnN0IGxheWVyMlN0cmluZyA9IGhpZ2hsaWdodGVkTWF0Y2hlcy5qb2luKFwiXCIpO1xyXG5cdCAgY29uc3QgYm9sZE1hdGNoZXMgPSBsYXllcjJTdHJpbmcubWF0Y2goYm9sZFJlZ2V4KTtcclxuXHQgIGlmIChib2xkTWF0Y2hlcykge1xyXG5cdCAgICBib2xkQ291bnQgPSBib2xkTWF0Y2hlcy5qb2luKFwiXCIpLmxlbmd0aCAtIChib2xkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnKionXHJcblx0ICB9XHJcblx0fVxyXG4gIFxyXG5cdFxyXG5cdFxyXG4gIFxyXG5cdHJldHVybiB7IGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50IH07XHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZXZlbE9mTWF0dXJpdHkobm90ZUxlbmd0aDogbnVtYmVyLCBsZW5ndGhPZlRpdGxlOiBudW1iZXIsIElubGlua3M6IG51bWJlciwgb3V0Z29pbmdMaW5rczogbnVtYmVyLCBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBub3RlTGVuZ3RoOiAke25vdGVMZW5ndGh9XFx0bGVuZ3RoT2ZUaXRsZTogJHtsZW5ndGhPZlRpdGxlfVxcdElubGlua3M6ICR7SW5saW5rc31cXHRvdXRnb2luZ0xpbmtzOiAke291dGdvaW5nTGlua3N9YClcclxuXHRcclxuXHQvLyBkZWNpZGUgaWYgbm90ZUxlbmd0aC1tYWp1cml0eSBvciBwcm9ncmVzc2l2ZVN1bS1tYWp1cml0eSBzaGFsbCBiZSB1c2VkXHJcblx0dmFyIGxlbmd0aE1hanVyaXR5ID0gMDtcclxuXHRpZihub3RlTGVuZ3RoID49IHByb2dyZXNzaXZlU3VtTWFqdXJpdHkpIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gbm90ZUxlbmd0aDtcclxuXHR9IGVsc2Uge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5O1xyXG5cdH1cclxuXHRcclxuXHRjb25zdCB0b3RhbFdlaWdodCA6IG51bWJlciA9IGxlbmd0aE1hanVyaXR5ICsgbGVuZ3RoT2ZUaXRsZSArIElubGlua3MgKyBvdXRnb2luZ0xpbmtzO1xyXG5cdGNvbnN0IGF2ZXJhZ2VXZWlnaHQgPSB0b3RhbFdlaWdodCAvIDU7XHJcblx0Ly8gY29uc29sZS5sb2coYHRvdGFsV2VpZ2h0OiAke3RvdGFsV2VpZ2h0fVxcdGF2ZXJhZ2VXZWlnaHQ6ICR7YXZlcmFnZVdlaWdodH1gKVxyXG5cdGlmIChhdmVyYWdlV2VpZ2h0IDwgMC41KSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMSkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDIpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMy41KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gNCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlT3V0bGlua3Mob3V0bGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG91dGxpbmtzOiAke291dGxpbmtzfWApXHJcblx0aWYgKG91dGxpbmtzIDwgMikge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDMpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA1KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgOSkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTIpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUlubGlua3MobnVtSW5saW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvL3ZhciBwcm96ZW50SW5saW5rcyA9IG51bUlubGlua3MgKiAxMDAgLyBudW1BbGxGaWxlcztcclxuXHQvL2NvbnNvbGUubG9nKGBudW1JbmxpbmtzOiAke251bUlubGlua3N9XFx0bnVtQWxsRmlsZXM6ICR7bnVtQWxsRmlsZXN9XFx0cHJvemVudElubGlua3M6ICR7cHJvemVudElubGlua3N9YClcclxuXHQvKmlmIChwcm96ZW50SW5saW5rcyA8IDAuMDA1IHx8IHByb3plbnRJbmxpbmtzID4gMC4xKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgKi8gaWYgKG51bUlubGlua3MgPT0gMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgNCkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgOCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDE2KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPj0gMTYgJiYgbnVtSW5saW5rcyA8IDUwMCApIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZURpcmVjdGlvbihyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRsZXQgcmF0aW5nID0gXCJcIlxyXG5cdGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPiByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDdcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA2XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA9PSByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTI3QTFcdUZFMEZcIlxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlwiXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIGlmIChmaWxlbmFtZS5sZW5ndGggPCAzMCkge1xyXG5cdHJldHVybiAwO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgODApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDEwMCkge1xyXG5cdHJldHVybiAzO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTUwKSB7XHJcblx0cmV0dXJuIDU7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxOTApIHtcclxuXHRyZXR1cm4gNDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDIxMCkge1xyXG5cdHJldHVybiAyO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjUwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIHtcclxuXHRyZXR1cm4gMDtcclxuICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU5vdGVMZW5ndGgoY29udGVubGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGlmIChjb250ZW5sZW5ndGggPCAyMDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgNTUwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEwMDApIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTIwMCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyMDAwKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDI1MDApIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMzAwMCkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1iZXJPZk91dGxpbmtzKGFjdGl2ZUZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuXHQvLyBjb25zdCBhY3RpdmVGaWxlOiBURmlsZSB8IG51bGwgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRpZiAoIWFjdGl2ZUZpbGUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHRjb25zdCBpbmxpbmtzID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGFjdGl2ZUZpbGUpPy5saW5rcztcclxuXHRyZXR1cm4gaW5saW5rcyA/IE9iamVjdC5rZXlzKGlubGlua3MpLmxlbmd0aCA6IDA7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgXHJcblx0Y29uc3QgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uID0gZmlsZW5hbWU7IC8vLnNsaWNlKDAsIC1maWxlbmFtZS5sZW5ndGgpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gZm9ybWF0dGluZyBzeW1ib2xzXHJcblx0Y29uc3Qgc3RyaXBwZWRDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9bKl9+YF0vZywgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBoZWFkaW5ncyB0aGF0IG1hdGNoIHRoZSBmaWxlbmFtZVxyXG5cdGNvbnN0IGhlYWRpbmdSZWdleCA9IC9eKCMrKVxccyguKikkL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MgPSBzdHJpcHBlZENvbnRlbnQucmVwbGFjZShoZWFkaW5nUmVnZXgsIChtYXRjaCwgcDEsIHAyKSA9PiB7XHJcblx0XHJcblx0XHQvLyBjb25zb2xlLmxvZyhgcDI6ICR7cDJ9YCk7XHJcblx0XHRpZiAocDIgPT09IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtYXRjaDtcclxuXHR9KTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRIZWFkaW5nczogJHtjb250ZW50V2l0aG91dEhlYWRpbmdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWV0YWRhdGEgYmxvY2tzIGZyb20gY291bnRcclxuXHRjb25zdCBtZXRhZGF0YVJlZ2V4ID0gL14tLS1bXFxzXFxTXSo/LS0tL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEgPSBjb250ZW50V2l0aG91dEhlYWRpbmdzLnJlcGxhY2UobWV0YWRhdGFSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TWV0YWRhdGE6ICR7Y29udGVudFdpdGhvdXRNZXRhZGF0YX1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlICN0YWdzIGZyb20gY291bnRcclxuXHRjb25zdCB0YWdSZWdleCA9IC8jW15cXHNdKy9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0VGFncyA9IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEucmVwbGFjZSh0YWdSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0VGFnczogJHtjb250ZW50V2l0aG91dFRhZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBsaW5rcyBhbmQgV2lraXBlZGlhLWxpbmtzIGZyb20gY291bnRcclxuXHRjb25zdCBsaW5rUmVnZXggPSAvXFxbLio/XFxdXFwoLio/XFwpfFxcW1xcWy4qP1xcXVxcXS9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TGlua3MgPSBjb250ZW50V2l0aG91dFRhZ3MucmVwbGFjZShsaW5rUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dExpbmtzOiAke2NvbnRlbnRXaXRob3V0TGlua3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBibGFuayBuZXdsaW5lc1xyXG5cdGNvbnN0IGZpbHRlcmVkQ29udGVudDogc3RyaW5nID0gY29udGVudFdpdGhvdXRMaW5rc1xyXG5cdC5zcGxpdCgnXFxuJykgLy8gU3BsaXQgdGhlIGNvbnRlbnQgaW50byBhbiBhcnJheSBvZiBsaW5lc1xyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpIC8vIEZpbHRlciBvdXQgbGluZXMgdGhhdCBhcmUgZW1wdHkgb3IgY29udGFpbiBvbmx5IHdoaXRlc3BhY2VcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICctLS0nKSAvLyByZW1vdmUgLS0tIG9uIHNpbmdsZSBsaW5lc1xyXG5cdC5qb2luKCdcXG4nKTsgLy8gSm9pbiB0aGUgcmVtYWluaW5nIGxpbmVzIGJhY2sgaW50byBhIHN0cmluZywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzXHJcblx0Ly8gY29uc29sZS5sb2coYGZpbHRlcmVkQ29udGVudDogJHtmaWx0ZXJlZENvbnRlbnR9YCk7XHJcblxyXG5cdC8vIENvdW50IHRoZSByZW1haW5pbmcgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGNoYXJDb3VudCA9IGZpbHRlcmVkQ29udGVudC5sZW5ndGg7XHJcblx0Ly8gY29uc29sZS5sb2coYGNoYXJDb3VudDogJHtjaGFyQ291bnR9YCk7XHJcblxyXG5cdHJldHVybiBjaGFyQ291bnQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rc19zaW5nbGUoZmlsZV9wYXRoOiBzdHJpbmcsIHZhdWx0X3BhdGg6IHN0cmluZyk6IG51bWJlciB7XHJcblx0Ly8gR2V0IHRoZSBmaWxlbmFtZSBhbmQgZGlyZWN0b3J5IG9mIHRoZSBmaWxlIHdlJ3JlIGNvdW50aW5nIGxpbmtzIHRvXHJcblx0Y29uc3QgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVfcGF0aCk7XHJcblx0Y29uc3QgZGlyZWN0b3J5ID0gcGF0aC5kaXJuYW1lKGZpbGVfcGF0aCk7XHJcblxyXG5cdC8vIENyZWF0ZSBhIHNldCB0byBob2xkIGFsbCB0aGUgZmlsZXMgdGhhdCBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdGNvbnN0IGxpbmtpbmdfZmlsZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xyXG5cclxuXHQvLyBSZWN1cnNpdmVseSBzZWFyY2ggZm9yIGZpbGVzIGluIHRoZSB2YXVsdCBkaXJlY3RvcnkgdGhhdCBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdGNvbnN0IHdhbGtTeW5jID0gKGRpcjogc3RyaW5nLCBmaWxlbGlzdDogc3RyaW5nW10pID0+IHtcclxuXHRcdGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoZGlyKTtcclxuXHRcdGZpbGVsaXN0ID0gZmlsZWxpc3QgfHwgW107XHJcblx0XHRmaWxlcy5mb3JFYWNoKChmaWxlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0aWYgKGZzLnN0YXRTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpKS5pc0RpcmVjdG9yeSgpKSB7XHJcblx0XHRcdFx0ZmlsZWxpc3QgPSB3YWxrU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgZmlsZWxpc3QpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdC8vIElnbm9yZSBub24tbWQgZmlsZXMgYW5kIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRpZiAoIWZpbGUuZW5kc1dpdGgoXCIubWRcIikgfHwgZmlsZSA9PT0gZmlsZW5hbWUpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFJlYWQgdGhlIGZpbGUgYW5kIGxvb2sgZm9yIGxpbmtzIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIFwidXRmLThcIik7XHJcblx0XHRcdFx0ZGF0YS5zcGxpdCgnXFxuJykuZm9yRWFjaCgobGluZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAobGluZS5pbmNsdWRlcyhgW1ske2ZpbGVuYW1lLnNsaWNlKDAsIC0zKX1dXWApIHx8IGxpbmUuaW5jbHVkZXMoYFske2ZpbGVuYW1lLnNsaWNlKDAsIC0zKX1dYCkpIHtcclxuXHRcdFx0XHRcdFx0Ly8gV2UgZm91bmQgYSBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZSFcclxuXHRcdFx0XHRcdFx0bGlua2luZ19maWxlcy5hZGQocGF0aC5yZWxhdGl2ZShkaXJlY3RvcnksIHBhdGguam9pbihkaXIsIGZpbGUpKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIGZpbGVsaXN0O1xyXG5cdH07XHJcblxyXG5cdHdhbGtTeW5jKHZhdWx0X3BhdGgsIFtdKTtcclxuXHJcblx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgYXJlIG1lbnRpb25pbmcgdGhlIGlucHV0IGZpbGVcclxuXHRyZXR1cm4gbGlua2luZ19maWxlcy5zaXplO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3MoZmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG4gICAgY29uc3QgeyBhcHA6IHsgbWV0YWRhdGFDYWNoZTogeyByZXNvbHZlZExpbmtzIH0gfSB9ID0gdGhpcztcclxuICAgIGNvbnN0IHsgcGF0aCB9ID0gZmlsZTtcclxuXHJcbiAgICBjb25zdCBzdW1JbmxpbmtzID0gT2JqZWN0LnZhbHVlcyhyZXNvbHZlZExpbmtzKVxyXG4gICAgICAgIC5tYXAoKHZhbDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSkgPT4gdmFsW3BhdGhdID8/IDApXHJcbiAgICAgICAgLnJlZHVjZSgobGVmdCwgcmlnaHQpID0+IGxlZnQgKyByaWdodCwgMCk7XHJcblxyXG4gICAgcmV0dXJuIHN1bUlubGlua3M7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZUNvdW50TWFwID0gYXN5bmMgKGFwcDogQXBwLCBleGNsdWRlVGFnOiBzdHJpbmcsIGV4Y2x1ZGVGb2xkZXI6IHN0cmluZyk6IFByb21pc2U8TWFwPHN0cmluZywgbnVtYmVyPj4gPT4ge1xyXG5cclxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHJcblx0XHJcblx0Ly8gZmlsZXMgd2l0aCB0aGlzICN0YWdzIGluIHRvIGlnbm9yZVxyXG5cdGxldCBleGNsdWRlZFN1YnN0cmluZ3MgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVUYWcgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBleGNsdWRlVGFnLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRcclxuXHJcblx0Ly8gZm9sZGVycyB0byBpZ25vcmUgLm1kLWZpbGVzIGluXHJcblx0bGV0IGV4Y2x1ZGVkRm9sZGVycyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZUZvbGRlciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IGV4Y2x1ZGVGb2xkZXIuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdGV4Y2x1ZGVkRm9sZGVycy5wdXNoKCcub2JzaWRpYW4nLCAnLnRyYXNoJyk7IC8vIGhhcmRjb2RlIHRoZSBiYXNpYyBmb2xkZXJzXHJcblx0XHJcbiAgICBjb25zdCBmaWxlQ291bnRNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cclxuXHRcdGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTtcclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcblxyXG5cdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblxyXG4gICAgICAgIGlmICghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuICAgICAgICB9XHJcblx0XHRcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsZUNvdW50TWFwO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlTWFwID0gYXN5bmMgKGFwcDogQXBwLCBleGNsdWRlVGFnOiBzdHJpbmcsIGV4Y2x1ZGVGb2xkZXI6IHN0cmluZyk6IFByb21pc2U8VEZpbGVbXT4gPT4ge1xyXG5cclxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHJcblx0Ly8gZmlsZXMgd2l0aCB0aGlzICN0YWdzIGluIHRvIGlnbm9yZVxyXG5cdGxldCBleGNsdWRlZFN1YnN0cmluZ3MgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVUYWcgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBleGNsdWRlVGFnLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZFN1YnN0cmluZ3M6ICR7ZXhjbHVkZWRTdWJzdHJpbmdzfWApXHJcblx0Ly8gZm9sZGVycyB0byBpZ25vcmUgLm1kLWZpbGVzIGluXHJcblx0bGV0IGV4Y2x1ZGVkRm9sZGVycyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZUZvbGRlciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IGV4Y2x1ZGVGb2xkZXIuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdGV4Y2x1ZGVkRm9sZGVycy5wdXNoKCcub2JzaWRpYW4nLCAnLnRyYXNoJyk7IC8vIGhhcmRjb2RlIHRoZSBiYXNpYyBmb2xkZXJzXHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRGb2xkZXJzOiAke2V4Y2x1ZGVkRm9sZGVyc31gKVx0XHJcbiAgICBsZXQgZmlsZUFycmF5OiBURmlsZVtdID0gW107XHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cclxuICAgICAgICBjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdC8vY29uc29sZS5sb2coYGZpbGUucGF0aDogJHtmaWxlLnBhdGh9YClcclxuXHRcdGlmICgoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgfHwgZXhjbHVkZVRhZy5sZW5ndGggPT09IDApICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBmaWxlICR7ZmlsZX0gZ2V0J3MgYWRkZWQuYClcclxuXHRcdFx0ZmlsZUFycmF5LnB1c2goZmlsZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlsZUFycmF5O1xyXG59O1xyXG4iLCAiaW1wb3J0IHtURmlsZX0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdENyZWF0ZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdENyZWF0ZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5jdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcbiAgXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RNb2RpZmllZEZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0TW9kaWZpZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0TW9kaWZpZWRGaWxlLnN0YXQubXRpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RNb2RpZmllZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RNb2RpZmllZEZpbGU7XHJcbn0gIFxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3REYXRlRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0XHRpZiAoZmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RDcmVhdGVkRmlsZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtb250aHNCZXR3ZWVuKHN0YXJ0TW9udGg6IERhdGUsIGVuZE1vbnRoOiBEYXRlKTogbnVtYmVyIHtcclxuXHRsZXQgbW9udGhzID0gKGVuZE1vbnRoLmdldE1vbnRoKCkgLSBzdGFydE1vbnRoLmdldE1vbnRoKCkpICsgMTtcclxuXHRpZiAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSA+IHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkge1xyXG5cdFx0bW9udGhzICs9IChlbmRNb250aC5nZXRGdWxsWWVhcigpIC0gc3RhcnRNb250aC5nZXRGdWxsWWVhcigpKSoxMjtcclxuXHR9XHJcblx0cmV0dXJuIG1vbnRocztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvbkRhdGVzKGZpbGVzOiBURmlsZVtdKTogQXJyYXk8RGF0ZT4ge1xyXG5cdGNvbnN0IGNyZWF0aW9uRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XHJcbiAgXHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRjcmVhdGlvbkRhdGVzLnB1c2gobmV3IERhdGUoZmlsZS5zdGF0LmN0aW1lKSk7XHJcblx0fVxyXG4gIFxyXG5cdHJldHVybiBjcmVhdGlvbkRhdGVzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGlmaWNhdGlvbkRhdGVzKGZpbGVzOiBURmlsZVtdKTogQXJyYXk8RGF0ZT4ge1xyXG5cdGNvbnN0IGNyZWF0aW9uRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XHJcbiAgXHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRjcmVhdGlvbkRhdGVzLnB1c2gobmV3IERhdGUoZmlsZS5zdGF0Lm10aW1lKSk7XHJcblx0fVxyXG4gIFxyXG5cdHJldHVybiBjcmVhdGlvbkRhdGVzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0Rm9ybWF0KHlfYXhpczogc3RyaW5nLCBjb3VudHNTdHJpbmdNb2Q6IHN0cmluZywgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRsZXQgbW9uYXRzYmVncmVuenVuZyA9IG51bGxcclxuXHRpZiAoY2hhcnRSZWR1emllcnVuZ01vbmF0ZSA9PSAwKXtcclxuXHRcdG1vbmF0c2JlZ3Jlbnp1bmcgPSAwXHJcblx0fSBlbHNlIHtcclxuXHRcdG1vbmF0c2JlZ3Jlbnp1bmcgPSBjb3VudHNTdHJpbmdNb2Quc3BsaXQoJywnKS5sZW5ndGggLSBjaGFydFJlZHV6aWVydW5nTW9uYXRlXHJcblx0fVxyXG5cdFxyXG5cdC8vY29uc3QgbW9uYXRzYmVncmVuenVuZyA9IGxlbmd0aGNvdW50c1N0cmluZ0NyZWF0ZSAtIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdHJldHVybiBcImBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbXCIgKyB5X2F4aXMgKyBcIl1cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBtb2RpZmllZFxcbiAgICBkYXRhOiBbXCIgKyBjb3VudHNTdHJpbmdNb2QgKyBcIl1cXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogODAgJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxueVRpdGxlOiBcXFwiTnVtYmVyIG9mIE5vdGVzXFxcIlxcbnhUaXRsZTogXFxcIk1vbnRoc1xcXCJcXG54TWluOiBcIiArIG1vbmF0c2JlZ3Jlbnp1bmcgKyBcIlxcbmBgYFwiO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUNoYXJ0Q29udGVudCAoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgbmV3Q29udGVudDogc3RyaW5nKSB7XHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0aWYgKGxpbmUgPT09IFwiXkNoYXJ0TW9udGhcIikge1xyXG5cdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRpZiAocmVmZXJlbmNlICE9IG51bGwpe1xyXG5cdFx0ZW5kID0gcmVmZXJlbmNlO1xyXG5cdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAxOTtcclxuXHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3Q29udGVudCwgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgICBsZXZlbDogc3RyaW5nO1xyXG4gIH1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lmUmVjZWl2ZUFCYWRnZShsZXZlbE9sZDogbnVtYmVyLCBsZXZlbE5ldzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gIGxldCByZWNlaXZlQmFkZ2UgPSBmYWxzZVxyXG4gIGZvciAobGV0IGk9MDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKXtcclxuICAgIGlmIChsZXZlbE9sZCA8IGJhZGdlTGV2ZWxzW2ldICYmIGxldmVsTmV3ID49IGJhZGdlTGV2ZWxzW2ldKXtcclxuICAgICAgcmVjZWl2ZUJhZGdlID0gdHJ1ZVxyXG4gICAgfSBcclxuICB9XHJcbiAgcmV0dXJuIHJlY2VpdmVCYWRnZVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyLCBpbmZvcm06IGJvb2xlYW4pOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiwgbGV2ZWw6IFwibGV2ZWwgNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiAsIGxldmVsOiBcImxldmVsIDEwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiAsIGxldmVsOiBcImxldmVsIDI3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2UgT3dsIEd1cnVcIiwgZGVzY3JpcHRpb246IFwiV2hvby1ob28hIFlvdSd2ZSBhY2hpZXZlZCAnV2lzZSBPd2wgR3VydScgc3RhdHVzLiBZb3VyIHdpc2RvbSBpcyBsZWdlbmRhcnksIGFuZCB5b3VyIGhvb3RzIG9mIGtub3dsZWRnZSBlY2hvIHRocm91Z2ggdGhlIGZvcmVzdCBvZiBpZ25vcmFuY2UhXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFaW5zdGVpbiBJbmNhcm5hdGVcIiwgZGVzY3JpcHRpb246IFwiRXVyZWthISBZb3UndmUgYmVjb21lIGFuICdFaW5zdGVpbiBJbmNhcm5hdGUsJyBwdXNoaW5nIHRoZSBib3VuZGFyaWVzIG9mIHVuZGVyc3RhbmRpbmcgYW5kIGJlbmRpbmcgdGhlIGZhYnJpYyBvZiBrbm93bGVkZ2UgdG8geW91ciB3aWxsIVwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTWFzdGVybWluZCBTYWdlXCIsIGRlc2NyaXB0aW9uOiBcIk1hZ25pZmljZW50ISBZb3UndmUgYXNjZW5kZWQgdG8gdGhlIHJhbmsgb2YgJ01hc3Rlcm1pbmQgU2FnZSwnIGd1aWRpbmcgdGhlIHJpdmVycyBvZiBpbmZvcm1hdGlvbiBhbmQgZW5saWdodGVuaW5nIGFsbCB3aG8gc2VlayB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDZXJlYnJhbCBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZpc3NpbW8hIFlvdSdyZSBub3cgYSAnQ2VyZWJyYWwgTWFlc3RybywnIGNvbmR1Y3RpbmcgdGhlIHN5bXBob255IG9mIGtub3dsZWRnZSB3aXRoIHRoZSBmaW5lc3NlIG9mIGEgdmlydHVvc28gY29uZHVjdG9yIVwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiWmVuIEtub3dsZWRnZSBLZWVwZXJcIiwgZGVzY3JpcHRpb246IFwiU2VyZW5pdHkgYWNoaWV2ZWQhIEFzIGEgJ1plbiBLbm93bGVkZ2UgS2VlcGVyLCcgeW91IG1haW50YWluIGEgdHJhbnF1aWwgbWluZCB3aGlsZSBtYW5hZ2luZyB2YXN0IHBvb2xzIG9mIGtub3dsZWRnZSB3aXRoIGdyYWNlIGFuZCBwb2lzZS5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZFwiLCBkZXNjcmlwdGlvbjogXCJBbGwgaGFpbCB0aGUgJ0dyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCEnIFlvdSB3aWVsZCB0aGUga25vd2xlZGdlIG9mIGFnZXMgYW5kIGhvbGQgdGhlIGtleXMgdG8gdW5sb2NrIHRoZSBnYXRlcyBvZiB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZ1wiLCBkZXNjcmlwdGlvbjogXCJDb25ncmF0dWxhdGlvbnMsIG9oIHdpc2Ugb25lISBZb3UndmUgYXR0YWluZWQgdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgZW5saWdodGVubWVudCBhcyB0aGUgJ09tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nLicgWW91ciB1bmRlcnN0YW5kaW5nIGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgd2lzZG9tIGlzIGFzIHZhc3QgYXMgdGhlIGNvc21vcyBpdHNlbGYhXCIsIGxldmVsOiBcImxldmVsIDEwMFwiICB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNbaW5kZXhdXHJcbiAgfVxyXG4gIFxyXG5cclxuXHJcbiAgZXhwb3J0ICBmdW5jdGlvbiBnZXRCYWRnZUZvckluaXRMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzAsIDMsIDcsIDE1LCAyMywgMzAsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lc0luaXQ6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIFNlZWtlciBJbml0aWF0ZVwiLCBkZXNjcmlwdGlvbjogXCJXZWxjb21lIHRvIHRoZSBqb3VybmV5IG9mIGtub3dsZWRnZSEgQXMgYSAnTG9yZSBTZWVrZXIgSW5pdGlhdGUsJyB5b3UndmUgdGFrZW4geW91ciBmaXJzdCBzdGVwcyBpbnRvIHRoZSB3b3JsZCBvZiBvcmdhbml6ZWQgd2lzZG9tLiBZb3VyIHF1ZXN0IGhhcyBqdXN0IGJlZ3VuLCBhbmQgd2l0aCBlYWNoIG5vdGUgeW91IG1ha2UsIHlvdSBsYXkgdGhlIGZvdW5kYXRpb24gZm9yIGEgZnV0dXJlIHJpY2ggd2l0aCBpbnNpZ2h0cyBhbmQgdW5kZXJzdGFuZGluZy4gWW91ciBqb3VybmV5IHN0YXJ0cyBoZXJlLCBhbmQgdGhlIHBhdGggYWhlYWQgaXMgZmlsbGVkIHdpdGggcG90ZW50aWFsIGFuZCBkaXNjb3ZlcnkuXCIsIGxldmVsOiBcImxldmVsIDFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBBcHByZW50aWNlXCIsIGRlc2NyaXB0aW9uOiBcIllvdSd2ZSBoaXQgdGhlIGdyb3VuZCBydW5uaW5nIHdpdGggeW91ciBleGlzdGluZyBrbm93bGVkZ2UgdHJlYXN1cmVzISBZb3UncmUgYWxyZWFkeSBhbiAnTG9yZSBBcHByZW50aWNlLCcgYXJtZWQgd2l0aCBhIHdlYWx0aCBvZiB3aXNkb20gYW5kIHJlYWR5IHRvIHNoYXBlIGl0IGZ1cnRoZXIuXCIsIGxldmVsOiBcImxldmVsIDNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2F2dnkgU2Nob2xhclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgZ2l2ZW4geW91IGEgaGVhZCBzdGFydCEgWW91J3JlIG5vdyBhICdTYXZ2eSBTY2hvbGFyLCcgY29uZmlkZW50bHkgZGl2aW5nIGludG8gdGhlIHNlYSBvZiBpbmZvcm1hdGlvbiB3aXRoIGEgdHJlYXN1cmUgdHJvdmUgb2YgaW5zaWdodHMuXCIgLCBsZXZlbDogXCJsZXZlbCA3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhZ2UncyBGb3VuZGF0aW9uXCIsIGRlc2NyaXB0aW9uOiBcIkJ1aWxkaW5nIHVwb24geW91ciBwcmUtZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSBlc3RhYmxpc2hpbmcgdGhlICdTYWdlJ3MgRm91bmRhdGlvbicgZm9yIGFuIGV2ZW4gZ3JhbmRlciBlZGlmaWNlIG9mIGtub3dsZWRnZS4gWW91ciBncm91bmR3b3JrIGlzIGltcHJlc3NpdmUhXCIgLCBsZXZlbDogXCJsZXZlbCAxNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNkb20gU2VlZGxpbmdcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG51cnR1cmVkIHRoZSBncm93dGggb2YgYSAnV2lzZG9tIFNlZWRsaW5nLicgWW91J3JlIGN1bHRpdmF0aW5nIHlvdXIgZ2FyZGVuIG9mIGtub3dsZWRnZSB3aXRoIGNhcmUgYW5kIHBhdGllbmNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgMjNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiUHJvZGlnaW91cyBQcmVwYXJlclwiLCBkZXNjcmlwdGlvbjogXCJUaGFua3MgdG8geW91ciBwcmlvciBlZmZvcnRzLCB5b3UncmUgYSAnUHJvZGlnaW91cyBQcmVwYXJlciwnIHN0YW5kaW5nIHRhbGwgYW1vbmcgeW91ciBub3RlcyBhbmQgcmVhZHkgdG8gY29ucXVlciBuZXcgcmVhbG1zIG9mIHVuZGVyc3RhbmRpbmcuXCIgLCBsZXZlbDogXCJsZXZlbCAzMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFcGljIEVwaXBoYW55IEV4cGxvcmVyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgcGFzdCBub3RlcyBoYXZlIGxlZCB5b3UgdG8gdGhlIGdyYW5kICdFcGljIEVwaXBoYW55IEV4cGxvcmVyJyBzdGF0dXMhIFlvdSd2ZSBhbHJlYWR5IGJlZW4gZG93biBhIGZldyByYWJiaXQgaG9sZXMgYW5kIGNvbWUgb3V0IHdpdGggZGF6emxpbmcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEx1bWluYXJ5XCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBpbGx1bWluYXRpbmcgeW91ciBwYXRoLCB5b3UndmUgYmVjb21lIGEgJ0xvcmUgTHVtaW5hcnksJyBzaGluaW5nIGxpZ2h0IG9uIHRoZSBteXN0ZXJpZXMgb2YgdGhlIHVuaXZlcnNlLCBvbmUgaWRlYSBhdCBhIHRpbWUuXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY3JpYmUgb2YgdGhlIEFuY2llbnRzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgbWFzdGVyeSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFuYWdlbWVudCBoYXMgZWxldmF0ZWQgeW91IHRvIHRoZSBlc3RlZW1lZCByYW5rIG9mIHRoZSAnU2NyaWJlIG9mIHRoZSBBbmNpZW50cy4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSB0cmFuc2Zvcm1lZCBpbnRvIHRyZWFzdXJlcywgYnJpZGdpbmcgdGhlIGdhcCBiZXR3ZWVuIG9sZCB3aXNkb20gYW5kIG5ldyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV1cmVrYSBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkFybWVkIHdpdGggeW91ciBleGlzdGluZyBub3RlcywgeW91J3JlIHRoZSAnRXVyZWthIE1hZXN0cm8sJyBjb21wb3NpbmcgYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSB3aXRoIHRoZSBtZWxvZHkgb2YgZGlzY292ZXJ5LlwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2hyb25pY2xlcyBDaGFtcGlvblwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgc3RhbmRpbmcgYXMgYSB0ZXN0YW1lbnQsIHlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgaWxsdXN0cmlvdXMgJ0Nocm9uaWNsZXMgQ2hhbXBpb24nIGxldmVsLiBZb3VyIGpvdXJuZXkgdGhyb3VnaCB0aW1lJ3MgdGFwZXN0cnkgaGFzIGJyb3VnaHQgZm9ydGggYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSBwYXN0IGFuZCBwcmVzZW50LlwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyXCIsIGRlc2NyaXB0aW9uOiBcIkFzICdUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXIsJyB5b3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFwcGVkIG91dCB1bmNoYXJ0ZWQgdGVycml0b3JpZXMgb2YgdW5kZXJzdGFuZGluZy4gWW91ciBjdXJpb3NpdHkga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciBub3RlcyBhcmUgdGhlIGNvbXBhc3MgZ3VpZGluZyB5b3VyIGV4cGxvcmF0aW9uLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU3VsdGFuIG9mIFN5bnRoZXNpc1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFkZSB5b3UgdGhlICdTdWx0YW4gb2YgU3ludGhlc2lzLicgWW91J3JlIHRoZSBtYXN0ZXIgd2VhdmVyLCB0aHJlYWRpbmcgdG9nZXRoZXIgdGhyZWFkcyBvZiBpbmZvcm1hdGlvbiBpbnRvIGEgcmljaCB0YXBlc3RyeSBvZiBpbnNpZ2h0LlwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXRlcm5hbCBBcmNoaXZpc3RcIiwgZGVzY3JpcHRpb246IFwiQXQgdGhlIHBpbm5hY2xlIG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYXN0ZXJ5LCB5b3UncmUgbm93IHJldmVyZWQgYXMgdGhlICdFdGVybmFsIEFyY2hpdmlzdC4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMsIGNhcmVmdWxseSBjdXJhdGVkIGFuZCBudXJ0dXJlZCwgc3RhbmQgYXMgaW1tb3J0YWwgYmVhY29ucywgZ3VpZGluZyBzZWVrZXJzIHRocm91Z2ggdGhlIGxhYnlyaW50aCBvZiBrbm93bGVkZ2UgYWNyb3NzIGFnZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAxMDBcIiB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNJbml0W2luZGV4XVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIEV4YW1wbGUgdXNhZ2U6XHJcbiAgLy8gY29uc3QgY3VycmVudExldmVsID0gNDI7IC8vIFJlcGxhY2UgdGhpcyB3aXRoIHRoZSBhY3R1YWwgcGxheWVyJ3MgbGV2ZWxcclxuICAvLyBjb25zdCBiYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoY3VycmVudExldmVsKTtcclxuICAvLyBjb25zb2xlLmxvZyhgQ29uZ3JhdHVsYXRpb25zISBZb3UndmUgcmVhY2hlZCBMZXZlbCAke2N1cnJlbnRMZXZlbH0uIFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApO1xyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuICAgIC8qXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiB9LFxyXG4gICAgICAvLyBBZGQgbW9yZSBiYWRnZXMgaGVyZSBmb3IgbGV2ZWxzIDUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCBhbmQgMTAwXHJcbiAgICAgIC8vIEV4YW1wbGU6XHJcbiAgICAgIC8vIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiIH0sXHJcbiAgICAgIC8vIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgfSxcclxuICAgICAgLy8gLi4uYW5kIHNvIG9uXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgY29uc3QgbWF4TGV2ZWwgPTEwMDsgLy8gQXNzdW1pbmcgZWFjaCBiYWRnZSBpcyBhd2FyZGVkIGV2ZXJ5IDUgbGV2ZWxzXHJcbiAgICBjb25zdCBjYXBwZWRMZXZlbCA9IE1hdGgubWluKGxldmVsLCBtYXhMZXZlbCk7XHJcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoY2FwcGVkTGV2ZWwgLyA1KSAtIDE7XHJcbiAgICByZXR1cm4gYmFkZ2VzW2luZGV4XTtcclxuICB9XHJcbiAgXHJcblxyXG4gIGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIH1cclxuICAqL1xyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBMZXZlbERhdGEge1xyXG4gICAgcG9pbnRzOiBudW1iZXI7XHJcbiAgICBsZXZlbDogbnVtYmVyO1xyXG4gICAgcG9pbnRzTmV4dDogbnVtYmVyO1xyXG4gIH1cclxuICBcclxuICBjb25zdCBsZXZlbERhdGE6IExldmVsRGF0YVtdID0gW1xyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAwLCBwb2ludHNOZXh0OiAwfSxcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMSwgcG9pbnRzTmV4dDogMTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDAsIGxldmVsOiAyLCBwb2ludHNOZXh0OiAzMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMCwgbGV2ZWw6IDMsIHBvaW50c05leHQ6IDc1MDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwLCBsZXZlbDogNCwgcG9pbnRzTmV4dDogMTUwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTAwMCwgbGV2ZWw6IDUsIHBvaW50c05leHQ6IDMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAsIGxldmVsOiA2LCBwb2ludHNOZXh0OiA1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwMDAwLCBsZXZlbDogNywgcG9pbnRzTmV4dDogODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MDAwMCwgbGV2ZWw6IDgsIHBvaW50c05leHQ6IDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMDAwMCwgbGV2ZWw6IDksIHBvaW50c05leHQ6IDE3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3MDAwMCwgbGV2ZWw6IDEwLCBwb2ludHNOZXh0OiAyMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzAwMDAsIGxldmVsOiAxMSwgcG9pbnRzTmV4dDogMzAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwLCBsZXZlbDogMTIsIHBvaW50c05leHQ6IDM4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4MDAwMCwgbGV2ZWw6IDEzLCBwb2ludHNOZXh0OiA0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzAwMDAsIGxldmVsOiAxNCwgcG9pbnRzTmV4dDogNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjAwMDAwLCBsZXZlbDogMTUsIHBvaW50c05leHQ6IDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAwMCwgbGV2ZWw6IDE2LCBwb2ludHNOZXh0OiA5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjAwMDAsIGxldmVsOiAxNywgcG9pbnRzTmV4dDogMTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMTAwMDAsIGxldmVsOiAxOCwgcG9pbnRzTmV4dDogMTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMjAwMDAsIGxldmVsOiAxOSwgcG9pbnRzTmV4dDogMTU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1NTAwMDAsIGxldmVsOiAyMCwgcG9pbnRzTmV4dDogMTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4MDAwMDAsIGxldmVsOiAyMSwgcG9pbnRzTmV4dDogMjA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwNzAwMDAsIGxldmVsOiAyMiwgcG9pbnRzTmV4dDogMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzNjAwMDAsIGxldmVsOiAyMywgcG9pbnRzTmV4dDogMjY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2NzAwMDAsIGxldmVsOiAyNCwgcG9pbnRzTmV4dDogMzAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMDAsIGxldmVsOiAyNSwgcG9pbnRzTmV4dDogMzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNTAwMDAsIGxldmVsOiAyNiwgcG9pbnRzTmV4dDogMzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MjAwMDAsIGxldmVsOiAyNywgcG9pbnRzTmV4dDogNDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMTAwMDAsIGxldmVsOiAyOCwgcG9pbnRzTmV4dDogNDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MjAwMDAsIGxldmVsOiAyOSwgcG9pbnRzTmV4dDogNDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5NTAwMDAsIGxldmVsOiAzMCwgcG9pbnRzTmV4dDogNTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0MDAwMDAsIGxldmVsOiAzMSwgcG9pbnRzTmV4dDogNTg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU4NzAwMDAsIGxldmVsOiAzMiwgcG9pbnRzTmV4dDogNjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYzNjAwMDAsIGxldmVsOiAzMywgcG9pbnRzTmV4dDogNjg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY4NzAwMDAsIGxldmVsOiAzNCwgcG9pbnRzTmV4dDogNzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDAwMDAsIGxldmVsOiAzNSwgcG9pbnRzTmV4dDogNzk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5NTAwMDAsIGxldmVsOiAzNiwgcG9pbnRzTmV4dDogODUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg1MjAwMDAsIGxldmVsOiAzNywgcG9pbnRzTmV4dDogOTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkxMTAwMDAsIGxldmVsOiAzOCwgcG9pbnRzTmV4dDogOTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk3MjAwMDAsIGxldmVsOiAzOSwgcG9pbnRzTmV4dDogMTAzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDM1MDAwMCwgbGV2ZWw6IDQwLCBwb2ludHNOZXh0OiAxMTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMDAwMDAwLCBsZXZlbDogNDEsIHBvaW50c05leHQ6IDExNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTE2NzAwMDAsIGxldmVsOiA0MiwgcG9pbnRzTmV4dDogMTIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjM2MDAwMCwgbGV2ZWw6IDQzLCBwb2ludHNOZXh0OiAxMzA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMDcwMDAwLCBsZXZlbDogNDQsIHBvaW50c05leHQ6IDEzODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTM4MDAwMDAsIGxldmVsOiA0NSwgcG9pbnRzTmV4dDogMTQ1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNDU1MDAwMCwgbGV2ZWw6IDQ2LCBwb2ludHNOZXh0OiAxNTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MzIwMDAwLCBsZXZlbDogNDcsIHBvaW50c05leHQ6IDE2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTYxMTAwMDAsIGxldmVsOiA0OCwgcG9pbnRzTmV4dDogMTY5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjkyMDAwMCwgbGV2ZWw6IDQ5LCBwb2ludHNOZXh0OiAxNzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3NzUwMDAwLCBsZXZlbDogNTAsIHBvaW50c05leHQ6IDE4NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTg2MDAwMDAsIGxldmVsOiA1MSwgcG9pbnRzTmV4dDogMTk0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxOTQ3MDAwMCwgbGV2ZWw6IDUyLCBwb2ludHNOZXh0OiAyMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwMzYwMDAwLCBsZXZlbDogNTMsIHBvaW50c05leHQ6IDIxMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjEyNzAwMDAsIGxldmVsOiA1NCwgcG9pbnRzTmV4dDogMjIyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMjIwMDAwMCwgbGV2ZWw6IDU1LCBwb2ludHNOZXh0OiAyMzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMTUwMDAwLCBsZXZlbDogNTYsIHBvaW50c05leHQ6IDI0MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjQxMjAwMDAsIGxldmVsOiA1NywgcG9pbnRzTmV4dDogMjUxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNTExMDAwMCwgbGV2ZWw6IDU4LCBwb2ludHNOZXh0OiAyNjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2MTIwMDAwLCBsZXZlbDogNTksIHBvaW50c05leHQ6IDI3MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjcxNTAwMDAsIGxldmVsOiA2MCwgcG9pbnRzTmV4dDogMjgyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyODIwMDAwMCwgbGV2ZWw6IDYxLCBwb2ludHNOZXh0OiAyOTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI5MjcwMDAwLCBsZXZlbDogNjIsIHBvaW50c05leHQ6IDMwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAzNjAwMDAsIGxldmVsOiA2MywgcG9pbnRzTmV4dDogMzE0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMTQ3MDAwMCwgbGV2ZWw6IDY0LCBwb2ludHNOZXh0OiAzMjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMyNjAwMDAwLCBsZXZlbDogNjUsIHBvaW50c05leHQ6IDMzNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM3NTAwMDAsIGxldmVsOiA2NiwgcG9pbnRzTmV4dDogMzQ5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNDkyMDAwMCwgbGV2ZWw6IDY3LCBwb2ludHNOZXh0OiAzNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM2MTEwMDAwLCBsZXZlbDogNjgsIHBvaW50c05leHQ6IDM3MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzczMjAwMDAsIGxldmVsOiA2OSwgcG9pbnRzTmV4dDogMzg1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODU1MDAwMCwgbGV2ZWw6IDcwLCBwb2ludHNOZXh0OiAzOTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM5ODAwMDAwLCBsZXZlbDogNzEsIHBvaW50c05leHQ6IDQxMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDEwNzAwMDAsIGxldmVsOiA3MiwgcG9pbnRzTmV4dDogNDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MjM2MDAwMCwgbGV2ZWw6IDczLCBwb2ludHNOZXh0OiA0MzY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQzNjcwMDAwLCBsZXZlbDogNzQsIHBvaW50c05leHQ6IDQ1MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUwMDAwMDAsIGxldmVsOiA3NSwgcG9pbnRzTmV4dDogNDYzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NjM1MDAwMCwgbGV2ZWw6IDc2LCBwb2ludHNOZXh0OiA0NzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3NzIwMDAwLCBsZXZlbDogNzcsIHBvaW50c05leHQ6IDQ5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDkxMTAwMDAsIGxldmVsOiA3OCwgcG9pbnRzTmV4dDogNTA1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDUyMDAwMCwgbGV2ZWw6IDc5LCBwb2ludHNOZXh0OiA1MTk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUxOTUwMDAwLCBsZXZlbDogODAsIHBvaW50c05leHQ6IDUzNDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTM0MDAwMDAsIGxldmVsOiA4MSwgcG9pbnRzTmV4dDogNTQ4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDg3MDAwMCwgbGV2ZWw6IDgyLCBwb2ludHNOZXh0OiA1NjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU2MzYwMDAwLCBsZXZlbDogODMsIHBvaW50c05leHQ6IDU3ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTc4NzAwMDAsIGxldmVsOiA4NCwgcG9pbnRzTmV4dDogNTk0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1OTQwMDAwMCwgbGV2ZWw6IDg1LCBwb2ludHNOZXh0OiA2MDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwOTUwMDAwLCBsZXZlbDogODYsIHBvaW50c05leHQ6IDYyNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjI1MjAwMDAsIGxldmVsOiA4NywgcG9pbnRzTmV4dDogNjQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NDExMDAwMCwgbGV2ZWw6IDg4LCBwb2ludHNOZXh0OiA2NTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY1NzIwMDAwLCBsZXZlbDogODksIHBvaW50c05leHQ6IDY3MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjczNTAwMDAsIGxldmVsOiA5MCwgcG9pbnRzTmV4dDogNjkwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2OTAwMDAwMCwgbGV2ZWw6IDkxLCBwb2ludHNOZXh0OiA3MDY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcwNjcwMDAwLCBsZXZlbDogOTIsIHBvaW50c05leHQ6IDcyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzIzNjAwMDAsIGxldmVsOiA5MywgcG9pbnRzTmV4dDogNzQwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDA3MDAwMCwgbGV2ZWw6IDk0LCBwb2ludHNOZXh0OiA3NTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1ODAwMDAwLCBsZXZlbDogOTUsIHBvaW50c05leHQ6IDc3NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzc1NTAwMDAsIGxldmVsOiA5NiwgcG9pbnRzTmV4dDogNzkzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTMyMDAwMCwgbGV2ZWw6IDk3LCBwb2ludHNOZXh0OiA4MTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgxMTEwMDAwLCBsZXZlbDogOTgsIHBvaW50c05leHQ6IDgyOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODI5MjAwMDAsIGxldmVsOiA5OSwgcG9pbnRzTmV4dDogODQ3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NDc1MDAwMCwgbGV2ZWw6IDEwMCwgcG9pbnRzTmV4dDogODY2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NjYwMDAwMCwgbGV2ZWw6IDEwMSwgcG9pbnRzTmV4dDogODg0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4ODQ3MDAwMCwgbGV2ZWw6IDEwMiwgcG9pbnRzTmV4dDogOTAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MDM2MDAwMCwgbGV2ZWw6IDEwMywgcG9pbnRzTmV4dDogOTIyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjI3MDAwMCwgbGV2ZWw6IDEwNCwgcG9pbnRzTmV4dDogOTQyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NDIwMDAwMCwgbGV2ZWw6IDEwNSwgcG9pbnRzTmV4dDogOTYxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NjE1MDAwMCwgbGV2ZWw6IDEwNiwgcG9pbnRzTmV4dDogOTgxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5ODEyMDAwMCwgbGV2ZWw6IDEwNywgcG9pbnRzTmV4dDogMTAwMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMTEwMDAwLCBsZXZlbDogMTA4LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDIxMjAwMDAsIGxldmVsOiAxMDksIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwNDE1MDAwMCwgbGV2ZWw6IDExMCwgcG9pbnRzTmV4dDogMTA2MTUwMDAwIH0sXHJcbiAgXTtcclxuICBcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzOiBudW1iZXIpOiBMZXZlbERhdGEge1xyXG4gICAgbGV0IGxldmVsIDpMZXZlbERhdGEgPSBsZXZlbERhdGFbMF07XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmIChwb2ludHMgPj0gZGF0YS5wb2ludHMpIHtcclxuICAgICAgICBsZXZlbCA9IGRhdGE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsZXZlbDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBzdGF0dXNQb2ludHNGb3JMZXZlbCh0YXJnZXRMZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBzdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAodGFyZ2V0TGV2ZWwgPT0gZGF0YS5sZXZlbCAmJiBzdGF0dXNQb2ludHMgPT0gMCkge1xyXG4gICAgICAgIHN0YXR1c1BvaW50cyA9IGRhdGEucG9pbnRzO1xyXG4gICAgICB9IFxyXG4gICAgfVxyXG5cclxuXHRcdFxyXG5cdFx0cmV0dXJuIHN0YXR1c1BvaW50c1xyXG4gIH1cclxuICBcclxuXHJcbi8qXHJcbmNvbnN0IHBvaW50cyA9IDU1MDA7XHJcbmNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzKTtcclxuY29uc29sZS5sb2coYFdpdGggJHtwb2ludHN9IHBvaW50cywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgJHtsZXZlbH0uYCk7XHJcbiovIiwgImNvbnN0IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlOiBzdHJpbmdbXSA9IFtcclxuXHRcIlNldmVuIGRheXMgb2Ygbm90ZS10YWtpbmc/IFlvdSdyZSBwcmFjdGljYWxseSBhIG5vdGUgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgZmllc3RhISBcdUQ4M0NcdURGODlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgcGFydHkgZ29pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIFlvdSdyZSBsaWtlIHRoZSBKYW1lcyBCb25kIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURENzZcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2VjcmV0IGFnZW50IVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAnTm90ZS1BLURheScgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2FwZXMgb3B0aW9uYWwhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSd2ZSBwcmFjdGljYWxseSB3cml0dGVuIGEgbWluaSBub3ZlbCBieSBub3chIFx1RDgzRFx1RENEQVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBhdXRob3Igc3RhdHVzIGFjaGlldmVkIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBVc2FpbiBCb2x0IG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc3ByaW50aW5nIHRvd2FyZHMga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNwcmVlISBJdCdzIGxpa2UgYSBub3Rlcy1wbG9zaW9uISBcdUQ4M0RcdURDQTVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgZmlyZXdvcmtzIGNvbWluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGJhc2ljYWxseSB0aGUgTWljaGFlbCBKb3JkYW4gb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDMFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzbGFtIGR1bmshXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTVZQISBcdUQ4M0NcdURGQzZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzY29yaW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlICdTZXZlbiBEYXkgTm90ZSBGZXZlcicgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXRjaCB0aGUgZmV2ZXIhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIHJvY2tzdGFyISBcdUQ4M0NcdURGQjhcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBqYW1taW4nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIG1hZ2ljIHNob3chIE5vdyB5b3Ugc2VlIHRoZSBub3Rlcywgbm93IHlvdSBkb24ndCEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMsIGtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgbGlrZSBhIG5vdGUtdGFraW5nIEplZGkgTWFzdGVyISBcdUQ4M0NcdURGMENcdTI2OTRcdUZFMEYgW1hdIHBvaW50cywgbWF5IHRoZSBub3RlcyBiZSB3aXRoIHlvdSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTWFjR3l2ZXIsIHR1cm5pbmcgaW5mb3JtYXRpb24gaW50byBzb2x1dGlvbnMhIFx1RDgzRFx1REQyN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNyYWZ0aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgY2hlZiwgY29va2luZyB1cCBhIGtub3dsZWRnZSBmZWFzdCEgXHVEODNDXHVERjczXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY29va2luZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0MFx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIExld2lzIGFuZCBDbGFyaywgY2hhcnRpbmcgbmV3IHRlcnJpdG9yaWVzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEREZBXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBkZXRlY3RpdmUsIHNvbHZpbmcgY2FzZXMgb2YgY3VyaW9zaXR5ISBcdUQ4M0RcdURENzVcdUZFMEZcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBkZXRlY3RpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBwaW9uZWVyLCBibGF6aW5nIHRyYWlscyB0aHJvdWdoIHRoZSBmb3Jlc3RzIG9mIGluZm9ybWF0aW9uISBcdUQ4M0NcdURGMzJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwaW9uZWVyaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiXHJcbl07XHJcblxyXG5jb25zdCB0d29Ob3RlTWVzc2FnZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQm9vbSEgWW91IGp1c3QgYWNlZCB0aGUgMi1ub3RlIHRhbmdvISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIGdyb292aW4nIVwiLFxyXG5cdFwiVHdvIG5vdGVzIGluIGEgZGF5PyBZb3UncmUgb2ZmaWNpYWxseSBhIE5vdGUgTmluamEhIFx1RDgzRVx1REQ0QiBbWF0gcG9pbnRzIGVhcm5lZC4gUm9jayBvbiFcIixcclxuXHRcIkhpZ2gtZml2ZSEgWW91J3ZlIGNvbnF1ZXJlZCB0aGUgMi1ub3RlIHJvZGVvISBcdUQ4M0VcdUREMjAgW1hdIHBvaW50cyBlYXJuZWQuIFllZWhhdyFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlISBUd28gbm90ZXMgaW4gb25lIGRheSwgeW91IGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFR3byBub3RlcyBpbiBhIGRheSAtIHdoYXQncyB5b3VyIHNlY3JldCB3ZWFwb24/IFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiS2Fib29tISBZb3UganVzdCBibGV3IHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgd2F0ZXIhIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAyLW5vdGUgc3VwZXJzdGFyISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBpbiB0aGUgYmFnLiBLZWVwIHNoaW5pbmchXCIsXHJcblx0XCJEb3VibGUgdXAsIGRvdWJsZSBkb3duISBUd28gbm90ZXMgaW4gb25lIGRheSAtIHlvdSdyZSBhIHJvY2tzdGFyISBcdUQ4M0NcdURGQjggW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIHBhcnR5ISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIkthLWNoaW5nISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSByYWNraW5nIHVwIHRob3NlIHBvaW50cyEgXHVEODNEXHVEQ0IwIFtYXSBlYXJuZWQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFnaWNpYW4hIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCB0cmljaz9cIixcclxuXHRcIlR3byBub3Rlcz8gTmFpbGVkIGl0ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgZ29pbmchXCIsXHJcblx0XCJBYnJhLWNhZGFicmEhIFR3byBub3RlcyBhcHBlYXIhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSwgZG91YmxlIHRoZSBmdW4hIFR3byBub3RlcyBpbiBvbmUgZGF5ISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIGZpZXN0YSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fwb3chIFR3byBub3RlcyBpbiBhIGRheSAtIHlvdSdyZSBhIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGIFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgYWR2ZW50dXJlP1wiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiXHJcbl07XHJcblxyXG5jb25zdCByYW5kb21Qb2ludE5vdGljZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQmF6aW5nYSEgWW91IGp1c3Qgc25hZ2dlZCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiS2Fib29tISBbWF0gcG9pbnRzIGFyZSBub3cgaW4geW91ciBwb2NrZXQhXCIsXHJcblx0XCJXb29ob28hIFtYXSBwb2ludHMgZWFybmVkISBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiUG9pbnRzIGFob3khIFtYXSBtb3JlIGluIHRoZSBiYW5rIVwiLFxyXG5cdFwiU2NvcmUhIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciB0b3RhbCFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJaaXBwaXR5LXphcCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQ2hhbXBpb24gbW92ZSEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJCaW5nbyEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJTaGF6YW0hIFtYXSBwb2ludHMgdG8gdGhlIHJlc2N1ZSFcIixcclxuXHRcIkthLWNoaW5nISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlN1cGVyYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJCcmF2byEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiV2VsbCBkb25lISBbWF0gbW9yZSBwb2ludHMgaW4gdG93IVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzLCBqdXN0IGxpa2UgdGhhdCFcIixcclxuXHRcIkEgcm91bmQgb2YgYXBwbGF1c2UgZm9yIFtYXSBwb2ludHMhXCIsXHJcblx0XCJXaG9vc2ghIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiV29vISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiR3JlYXQgam9iISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkZhbnRhc3RpYyEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiSG9vcmF5ISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIk5pY2Ugb25lISBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQhXCIsXHJcblx0XCJXb290IHdvb3QhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJhbSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiQ29vbCBiZWFucyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJTcGxlbmRpZCEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTWFydmVsb3VzISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphbnkhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkV4cXVpc2l0ZSEgW1hdIHBvaW50cyBpbiB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiT3V0c3RhbmRpbmchIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIGpvYiFcIixcclxuXHRcIk1hZ25pZmljZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiVGVycmlmaWMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlN1cGVyYiEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIkV4Y2VsbGVudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiQXdlc29tZSEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiV2VsbCBwbGF5ZWQhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJJbXByZXNzaXZlISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQnJpbGxpYW50ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJOaWNlIG1vdmUhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlN0ZWxsYXIhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiV2VsbCBkZXNlcnZlZCEgW1hdIHBvaW50cyBlYXJuZWQhXCJcclxuXTtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZS5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZVtyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdHdvTm90ZU1lc3NhZ2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHR3b05vdGVNZXNzYWdlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyhwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiByYW5kb21Qb2ludE5vdGljZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gcmFuZG9tUG9pbnROb3RpY2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuLy8gRXhhbXBsZSB1c2FnZVxyXG4vLyBjb25zdCByYW5kb21Qb2ludHMgPSAxMDA7IC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjdHVhbCBwb2ludHMgdmFsdWVcclxuLy8gY29uc3QgcmFuZG9tTWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocmFuZG9tUG9pbnRzKTtcclxuLy8gY29uc29sZS5sb2cocmFuZG9tTWVzc2FnZSk7XHJcblxyXG5cclxuIl0sCiAgIm1hcHBpbmdz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QUEyQjtBQUNqQyxJQUFNLG9CQUFxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNIbEMsU0FBb0I7QUFDcEIsV0FBc0I7QUFFZixTQUFTLDZCQUE2QixnQkFBd0IsYUFBcUIsYUFBNkI7QUFDdEgsUUFBTSxnQkFB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QVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxJQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLEtBQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDbkQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN0RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFDekQ7QUFFTyxTQUFTLGtCQUFrQixRQUEyQjtBQUMzRCxNQUFJLFFBQW1CLFVBQVUsQ0FBQztBQUNsQyxhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLFVBQVUsS0FBSyxRQUFRO0FBQ3pCLGNBQVE7QUFBQSxJQUNWLE9BQU87QUFDTDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBRU8sU0FBUyxxQkFBcUIsYUFBNkI7QUFDaEUsTUFBSSxlQUFlO0FBQ25CLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksZUFBZSxLQUFLLFNBQVMsZ0JBQWdCLEdBQUc7QUFDbEQscUJBQWUsS0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUdGLFNBQU87QUFDUDs7O0FDOUlGLElBQU0sMEJBQW9DO0FBQUEsRUFDekM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLGtCQUE0QjtBQUFBLEVBQ2pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLHFCQUErQjtBQUFBLEVBQ3BDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBR08sU0FBUyxnQ0FBZ0MsUUFBd0I7QUFDdkUsUUFBTSxjQUFjLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSx3QkFBd0IsTUFBTTtBQUM3RSxRQUFNLFVBQVUsd0JBQXdC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Q0Q7QUFHQSxlQUFlLHFCQUFxQixRQUFnQixRQUFnQjtBQUNuRSxRQUFNLGFBQWEsS0FBSyxJQUFJLFVBQVUsb0JBQW9CLDZCQUFZO0FBRXRFLE1BQUksQ0FBQyxZQUFZO0FBQ2hCLFlBQVEsTUFBTSxnQ0FBZ0M7QUFDOUM7QUFBQSxFQUNEO0FBRUEsUUFBTSxTQUFTLFdBQVc7QUFDMUIsUUFBTSxlQUFlLE9BQU8sYUFBYTtBQUV6QyxNQUFJLENBQUMsY0FBYztBQUNsQixZQUFRLE1BQU0sc0VBQXNFO0FBQ3BGO0FBQUEsRUFDRDtBQUVBLE1BQUksZUFBZSxhQUFhLFdBQVcsUUFBUSxrQkFBTTtBQUN6RCxpQkFBZSxhQUFhLFdBQVcsUUFBUSwwQkFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsNEJBQVEsTUFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsb0JBQVEsTUFBTTtBQUVyRCxTQUFPLGlCQUFpQixZQUFZO0FBQ3JDO0FBRUEsU0FBUyw2QkFBNkIsZUFBdUIsV0FBMkI7QUFDdkYsTUFBSTtBQUNKLE1BQUksU0FBUyxlQUFlLEVBQUUsSUFBSSxXQUFVO0FBQzNDLG1CQUFlLFlBQVksU0FBUyxlQUFlLEVBQUU7QUFBQSxFQUN0RCxPQUFPO0FBQ04sbUJBQWU7QUFBQSxFQUNoQjtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImFwcCIsICJvYmoiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiTUlMTElTRUNPTkRTX0lOX1dFRUsiLCAiZm9ybWF0dGVycyIsICJsb2NhbGl6ZSIsICJ5IiwgIk0iLCAiZCIsICJhIiwgImgiLCAiSCIsICJtIiwgInMiLCAiUyIsICJkYXRlTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXRMb25nIiwgInRpbWVMb25nRm9ybWF0dGVyIiwgImRhdGVUaW1lTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXQiLCAiZm9ybWF0RGlzdGFuY2UiLCAiZm9ybWF0IiwgImZvcm1hdFJlbGF0aXZlIiwgIm9yZGluYWxOdW1iZXIiLCAidmFsdWVDYWxsYmFjayIsICJkZWZhdWx0T3B0aW9ucyIsICJsb2NhbGUiLCAibWF0Y2giLCAicGF0aCIsICJhcHAiLCAiZmlsZU5hbWUiLCAiY3VycmVudENvdW50IiwgImkiLCAiaSIsICJlIiwgImkiLCAibWF0Y2giLCAiZmlsZSIsICJhcHAiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIGNyZWF0ZWQuYClcclxuXHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBOb3RlcyBjcmVhdGVkIHRvZGF5LmApXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAxO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGlmIChjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzIDwgNykge1xyXG5cdFx0XHRjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcikge1xyXG5cdFx0aWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPD0gNikge1xyXG5cdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fSBlbHNlIGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpIHtcclxuXHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMSk7XHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSlcclxuXHRcdFx0Y29uc29sZS5sb2coYFdlZWtseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwO1xyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9fFx1RDgzRFx1REU4MCR7Ym9vc3RlckZhY3Rvcn0ke3RoaXMucmF0ZUJvb3N0ZXJEaXJlY3Rpb24oKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnXHJcblx0XHQvKmNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0XHRpZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwNlx1RkUwRidcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnXHJcblx0XHR9Ki9cclxuXHRcdGlmKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUpe1xyXG5cdFx0XHRkaXJlY3Rpb24gPSAnXHUyQjA2XHVGRTBGJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRpcmVjdGlvblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0Y29uc3QgbmV3VmFsdWUgPSBwYXJzZUZsb2F0KCh0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyBpbmNyZWFzZVZhbHVlKS50b0ZpeGVkKDEpKTtcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHRydWU7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRjb25zb2xlLmxvZyhgc3RyZWFrYm9vc3RlcjogJHt0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJ9YClcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gcGFyc2VGbG9hdCgodGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC0gZGVjcmVhc2VWYWx1ZSkudG9GaXhlZCgxKSlcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IGZhbHNlO1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5c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TSwwQkFBMEI7QUFDaEMsSUFBTSwyQkFBMkI7QUFDakMsSUFBTSxvQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDSGxDLFNBQW9CO0FBQ3BCLFdBQXNCO0FBRWYsU0FBUyw2QkFBNkIsZ0JBQXdCLGFBQXFC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QUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFD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LEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUdPLFNBQVMsZ0NBQWdDLFFBQXdCO0FBQ3ZFLFFBQU0sY0FBYyxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksd0JBQXdCLE1BQU07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QUEsRUFDcEI7QUFBQSxFQUVBLFNBQVM7QUFDUixVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsUUFBUSxLQUFLLFdBQVc7QUFBQSxFQUNuQztBQUFBLEVBRUEsVUFBVTtBQUNULFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQUEsRUFDakI7QUFDRDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K diff --git a/src/main.ts b/src/main.ts index 84d44c9..44c4817 100644 --- a/src/main.ts +++ b/src/main.ts @@ -487,8 +487,9 @@ export default class gamification extends Plugin { this.settings.weeklyNoteCreationTask = 0; this.settings.weeklyNoteCreationDate = window.moment().subtract(1, 'day').format('DD.MM.YYYY') this.decreaseStreakbooster(1) - this.settings.streakboosterDate = window.moment().subtract(1, 'day').format('DD.MM.YYYY') + //this.settings.streakboosterDate = window.moment().subtract(1, 'day').format('DD.MM.YYYY') await this.saveSettings(); + await this.updateStatusBar(this.statusbarGamification) console.log(`weekly Challenge reseted`) reset = true; } @@ -518,8 +519,9 @@ export default class gamification extends Plugin { console.log(`${newDailyNoteCreationTask}/2 Notes created today.`) } else if (newDailyNoteCreationTask == 2) { this.increaseStreakbooster(0.1) - this.settings.streakboosterDate = window.moment().format('DD.MM.YYYY'); + //this.settings.streakboosterDate = window.moment().format('DD.MM.YYYY'); await this.saveSettings(); + await this.updateStatusBar(this.statusbarGamification) await this.giveStatusPoints(pointsForDailyChallenge) const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge * (this.settings.badgeBoosterFactor + this.settings.streakbooster)); console.log(`daily Challenge reached! ${newDailyNoteCreationTask}/2 created.`) @@ -564,7 +566,7 @@ export default class gamification extends Plugin { console.log(`${newWeeklyNoteCreationTask}/7 Notes created in a chain.`) } else if (newWeeklyNoteCreationTask == 7) { this.increaseStreakbooster(1); - this.settings.streakboosterDate = window.moment().format('DD.MM.YYYY'); + //this.settings.streakboosterDate = window.moment().format('DD.MM.YYYY'); await this.saveSettings(); await this.giveStatusPoints(pointsForWeeklyChallenge) console.log(`Weekly Challenge reached! ${newWeeklyNoteCreationTask}/7 created in a chain.`) @@ -580,9 +582,26 @@ export default class gamification extends Plugin { async updateStatusBar(statusbar: HTMLSpanElement){ const currentLevel = getLevelForPoints(this.settings.statusPoints) const progressbarPercent = (this.settings.statusPoints - currentLevel.points)/(currentLevel.pointsNext - currentLevel.points)*100; - const charNumProgressbar = 10 + const charNumProgressbar = 10; const barLength = Math.round(progressbarPercent / charNumProgressbar) - statusbar.setText(`🎲|lvl: ${this.settings.statusLevel} | ${this.createProgressbar(charNumProgressbar, barLength)}`) + const boosterFactor = this.settings.streakbooster + statusbar.setText(`🎲|lvl: ${this.settings.statusLevel} | ${this.createProgressbar(charNumProgressbar, barLength)}|🚀${boosterFactor}${this.rateBoosterDirection()}`) + } + + private rateBoosterDirection(){ + let direction = '⬆️' + /*const oneDayBeforeCurrent = window.moment().subtract(1, 'day'); // Calculate one day before current date + if(window.moment(this.settings.weeklyNoteCreationDate, 'DD.MM.YYYY').isSame(oneDayBeforeCurrent, 'day')){ + direction = '⬆️' + } else { + direction = '⬇️' + }*/ + if(this.settings.streakboosterDate){ + direction = '⬆️'; + } else { + direction = '⬇️'; + } + return direction } private createProgressbar(charNumProgressbar: number, barLength: number) { @@ -623,6 +642,7 @@ export default class gamification extends Plugin { async increaseStreakbooster(increaseValue:number){ const newValue = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); this.settings.streakbooster = newValue; + this.settings.streakboosterDate = true; await this.saveData(this.settings) console.log(`streakbooster: ${this.settings.streakbooster}`) } @@ -635,6 +655,7 @@ export default class gamification extends Plugin { newValue = 0 } this.settings.streakbooster = newValue + this.settings.streakboosterDate = false; await this.saveData(this.settings) } diff --git a/src/settings.ts b/src/settings.ts index 5482d14..9c2a4f4 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -25,7 +25,7 @@ export const defaultSettings: Partial = { weeklyNoteCreationTask: 0, weeklyNoteCreationDate: '12.08.2023', streakbooster: 0, - streakboosterDate: '12.08.2023', + streakboosterDate: false, }; export interface ISettings { @@ -52,7 +52,7 @@ export interface ISettings { weeklyNoteCreationTask: number; weeklyNoteCreationDate: string; streakbooster: number; - streakboosterDate: string; + streakboosterDate: boolean; } @@ -82,7 +82,7 @@ export class GamificationPluginSettings extends PluginSettingTab { public weeklyNoteCreationTask: number; public weeklyNoteCreationDate: string; public streakbooster: number; - public streakboosterDate: string; + public streakboosterDate: boolean; constructor(app: App, plugin: gamification) { super(app, plugin); From ee803b2bd34e0a4f76cb7beb42c4d2dddc8e3453 Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 23:05:46 +0200 Subject: [PATCH 11/15] limit booster --- main.js | 7 +++++-- src/main.ts | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/main.js b/main.js index be5749e..7a9e5d9 100644 --- a/main.js +++ b/main.js @@ -3090,7 +3090,10 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` return this.updateAvatarPage(this.settings.avatarPageName); } async increaseStreakbooster(increaseValue) { - const newValue = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); + let newValue = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); + if (newValue > 80) { + newValue = 80; + } this.settings.streakbooster = newValue; this.settings.streakboosterDate = true; await this.saveData(this.settings); @@ -3461,4 +3464,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIGNyZWF0ZWQuYClcclxuXHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBOb3RlcyBjcmVhdGVkIHRvZGF5LmApXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAxO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGlmIChjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzIDwgNykge1xyXG5cdFx0XHRjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcikge1xyXG5cdFx0aWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPD0gNikge1xyXG5cdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fSBlbHNlIGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpIHtcclxuXHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMSk7XHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSlcclxuXHRcdFx0Y29uc29sZS5sb2coYFdlZWtseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwO1xyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9fFx1RDgzRFx1REU4MCR7Ym9vc3RlckZhY3Rvcn0ke3RoaXMucmF0ZUJvb3N0ZXJEaXJlY3Rpb24oKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnXHJcblx0XHQvKmNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0XHRpZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwNlx1RkUwRidcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnXHJcblx0XHR9Ki9cclxuXHRcdGlmKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUpe1xyXG5cdFx0XHRkaXJlY3Rpb24gPSAnXHUyQjA2XHVGRTBGJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRpcmVjdGlvblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0Y29uc3QgbmV3VmFsdWUgPSBwYXJzZUZsb2F0KCh0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyBpbmNyZWFzZVZhbHVlKS50b0ZpeGVkKDEpKTtcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHRydWU7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRjb25zb2xlLmxvZyhgc3RyZWFrYm9vc3RlcjogJHt0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJ9YClcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gcGFyc2VGbG9hdCgodGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC0gZGVjcmVhc2VWYWx1ZSkudG9GaXhlZCgxKSlcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IGZhbHNlO1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5c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TSwwQkFBMEI7QUFDaEMsSUFBTSwyQkFBMkI7QUFDakMsSUFBTSxvQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDSGxDLFNBQW9CO0FBQ3BCLFdBQXNCO0FBRWYsU0FBUyw2QkFBNkIsZ0JBQXdCLGFBQXFC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QUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFD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LEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUdPLFNBQVMsZ0NBQWdDLFFBQXdCO0FBQ3ZFLFFBQU0sY0FBYyxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksd0JBQXdCLE1BQU07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QUEsRUFDcEI7QUFBQSxFQUVBLFNBQVM7QUFDUixVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsUUFBUSxLQUFLLFdBQVc7QUFBQSxFQUNuQztBQUFBLEVBRUEsVUFBVTtBQUNULFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQUEsRUFDakI7QUFDRDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIGNyZWF0ZWQuYClcclxuXHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBOb3RlcyBjcmVhdGVkIHRvZGF5LmApXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAxO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGlmIChjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzIDwgNykge1xyXG5cdFx0XHRjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcikge1xyXG5cdFx0aWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPD0gNikge1xyXG5cdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fSBlbHNlIGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpIHtcclxuXHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMSk7XHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSlcclxuXHRcdFx0Y29uc29sZS5sb2coYFdlZWtseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwO1xyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9fFx1RDgzRFx1REU4MCR7Ym9vc3RlckZhY3Rvcn0ke3RoaXMucmF0ZUJvb3N0ZXJEaXJlY3Rpb24oKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnXHJcblx0XHQvKmNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0XHRpZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwNlx1RkUwRidcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnXHJcblx0XHR9Ki9cclxuXHRcdGlmKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUpe1xyXG5cdFx0XHRkaXJlY3Rpb24gPSAnXHUyQjA2XHVGRTBGJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRpcmVjdGlvblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gcGFyc2VGbG9hdCgodGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyICsgaW5jcmVhc2VWYWx1ZSkudG9GaXhlZCgxKSk7XHJcblx0XHRpZihuZXdWYWx1ZSA+IDgwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSA4MDtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHRydWU7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRjb25zb2xlLmxvZyhgc3RyZWFrYm9vc3RlcjogJHt0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJ9YClcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gcGFyc2VGbG9hdCgodGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC0gZGVjcmVhc2VWYWx1ZSkudG9GaXhlZCgxKSlcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IGZhbHNlO1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQ3JCO0FBOEJPLElBQU0sNkJBQU4sY0FBeUMsaUNBQWlCO0FBQUEsRUE0QmhFLFlBQVlDLE1BQVUsUUFBc0I7QUFDMUMsVUFBTUEsTUFBSyxNQUFNO0FBQ2pCLFNBQUssU0FBUztBQUFBLEVBQ2hCO0FBQUEsRUFFTyxVQUFnQjtBQUN0QixVQUFNLEVBQUUsWUFBWSxJQUFJO0FBQ3hCLGdCQUFZLFNBQVMscUJBQXFCO0FBQzFDLFNBQUssWUFBWSxNQUFNO0FBRXZCLFVBQU0sWUFBWSxZQUFZLFVBQVUsUUFBUTtBQUNoRCxjQUFVLFNBQVMsZUFBZTtBQUNsQyxVQUFNLGFBQWEsVUFBVSxTQUFTLEtBQUs7QUFBQSxNQUMzQyxNQUFNO0FB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QUFHO0FBQ2xEOzs7QUNqWk8sSUFBTSxxQkFBcUI7QUFDM0IsSUFBTSxpQkFBaUI7QUFDdkIsSUFBTSwwQkFBMEI7QUFDaEMsSUFBTSwyQkFBMkI7QUFDakMsSUFBTSxvQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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SUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1B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Q0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUdPLFNBQVMsZ0NBQWdDLFFB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RTNEO0FBR0EsSUFBTSxzQkFBTixjQUFrQyx1QkFBTTtBQUFBO0FBQUEsRUFHdkMsWUFBWUEsTUFBVSxhQUFxQjtBQUMxQyxVQUFNQSxJQUFHO0FBQ1QsU0FBSyxjQUFjO0FBQUEsRUFDcEI7QUFBQSxFQUVBLFNBQVM7QUFDUixVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsUUFBUSxLQUFLLFdBQVc7QUFBQSxFQUNuQztBQUFBLEVBRUEsVUFBVTtBQUNULFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQUEsRUFDakI7QUFDRDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K diff --git a/src/main.ts b/src/main.ts index 44c4817..86bc5fb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -640,7 +640,10 @@ export default class gamification extends Plugin { } async increaseStreakbooster(increaseValue:number){ - const newValue = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); + let newValue = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); + if(newValue > 80){ + newValue = 80; + } this.settings.streakbooster = newValue; this.settings.streakboosterDate = true; await this.saveData(this.settings) From b6f08d13ed706d6cec830bc79e61b61daae8e146 Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Thu, 5 Oct 2023 23:06:35 +0200 Subject: [PATCH 12/15] refactoring newBoosterFakfor --- main.js | 20 ++++++++++---------- src/main.ts | 18 +++++++++--------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/main.js b/main.js index 7a9e5d9..4f57dad 100644 --- a/main.js +++ b/main.js @@ -3090,22 +3090,22 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` return this.updateAvatarPage(this.settings.avatarPageName); } async increaseStreakbooster(increaseValue) { - let newValue = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); - if (newValue > 80) { - newValue = 80; + let newBoosterFakfor = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); + if (newBoosterFakfor > 80) { + newBoosterFakfor = 80; } - this.settings.streakbooster = newValue; + this.settings.streakbooster = newBoosterFakfor; this.settings.streakboosterDate = true; await this.saveData(this.settings); console.log(`streakbooster: ${this.settings.streakbooster}`); } async decreaseStreakbooster(decreaseValue) { - let newValue = parseFloat((this.settings.streakbooster - decreaseValue).toFixed(1)); - this.settings.streakbooster = newValue; - if (newValue < 0) { - newValue = 0; + let newBoosterFakfor = parseFloat((this.settings.streakbooster - decreaseValue).toFixed(1)); + this.settings.streakbooster = newBoosterFakfor; + if (newBoosterFakfor < 0) { + newBoosterFakfor = 0; } - this.settings.streakbooster = newValue; + this.settings.streakbooster = newBoosterFakfor; this.settings.streakboosterDate = false; await this.saveData(this.settings); } @@ -3464,4 +3464,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIGNyZWF0ZWQuYClcclxuXHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBOb3RlcyBjcmVhdGVkIHRvZGF5LmApXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAxO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGlmIChjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzIDwgNykge1xyXG5cdFx0XHRjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcikge1xyXG5cdFx0aWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPD0gNikge1xyXG5cdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fSBlbHNlIGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpIHtcclxuXHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMSk7XHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSlcclxuXHRcdFx0Y29uc29sZS5sb2coYFdlZWtseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwO1xyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9fFx1RDgzRFx1REU4MCR7Ym9vc3RlckZhY3Rvcn0ke3RoaXMucmF0ZUJvb3N0ZXJEaXJlY3Rpb24oKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnXHJcblx0XHQvKmNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0XHRpZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwNlx1RkUwRidcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnXHJcblx0XHR9Ki9cclxuXHRcdGlmKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUpe1xyXG5cdFx0XHRkaXJlY3Rpb24gPSAnXHUyQjA2XHVGRTBGJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRpcmVjdGlvblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gcGFyc2VGbG9hdCgodGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyICsgaW5jcmVhc2VWYWx1ZSkudG9GaXhlZCgxKSk7XHJcblx0XHRpZihuZXdWYWx1ZSA+IDgwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSA4MDtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHRydWU7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHRjb25zb2xlLmxvZyhgc3RyZWFrYm9vc3RlcjogJHt0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJ9YClcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld1ZhbHVlID0gcGFyc2VGbG9hdCgodGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC0gZGVjcmVhc2VWYWx1ZSkudG9GaXhlZCgxKSlcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld1ZhbHVlXHJcblx0XHRpZiAobmV3VmFsdWUgPCAwKXtcclxuXHRcdFx0bmV3VmFsdWUgPSAwXHJcblx0XHR9XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdWYWx1ZVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IGZhbHNlO1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQ3JCO0FBOEJPLElBQU0sNkJBQU4sY0FBeUMsaUNBQWlCO0FBQUEsRUE0QmhFLFlBQVlDLE1BQVUsUUFBc0I7QUFDMUMsVUFBTUEsTUFBSyxNQUFNO0FBQ2pCLFNBQUssU0FBUztBQUFBLEVBQ2hCO0FBQUEsRUFFTyxVQUFnQjtBQUN0QixVQUFNLEVBQUUsWUFBWSxJQUFJO0FBQ3hCLGdCQUFZLFNBQVMscUJBQXFCO0FBQzFDLFNBQUssWUFBWSxNQUFNO0FBRXZCLFVBQU0sWUFBWSxZQUFZLFVBQVUsUUFBUTtBQUNoRCxjQUFVLFNBQVMsZUFBZTtBQUNsQyxVQUFNLGFBQWEsVUFBVSxTQUFTLEtBQUs7QUFBQSxNQUMzQyxNQUFNO0FB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QUFHO0FBQ2xEOzs7QUNqWk8sSUFBTSxxQkFBcUI7QUFDM0IsSUFBTSxpQkFBaUI7QUFDdkIsSUFBTSwwQkFBMEI7QUFDaEMsSUFBTSwyQkFBMkI7QUFDakMsSUFBTSxvQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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SUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1B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Q0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUdPLFNBQVMsZ0NBQWdDLFFB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RTNEO0FBR0EsSUFBTSxzQkFBTixjQUFrQyx1QkFBTTtBQUFBO0FBQUEsRUFHdkMsWUFBWUEsTUFBVSxhQUFxQjtBQUMxQyxVQUFNQSxJQUFHO0FBQ1QsU0FBSyxjQUFjO0FBQUEsRUFDcEI7QUFBQSxFQUVBLFNBQVM7QUFDUixVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsUUFBUSxLQUFLLFdBQVc7QUFBQSxFQUNuQztBQUFBLEVBRUEsVUFBVTtBQUNULFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQUEsRUFDakI7QUFDRDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIGNyZWF0ZWQuYClcclxuXHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBOb3RlcyBjcmVhdGVkIHRvZGF5LmApXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAxO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGlmIChjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzIDwgNykge1xyXG5cdFx0XHRjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcikge1xyXG5cdFx0aWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPD0gNikge1xyXG5cdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fSBlbHNlIGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpIHtcclxuXHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMSk7XHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSlcclxuXHRcdFx0Y29uc29sZS5sb2coYFdlZWtseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwO1xyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9fFx1RDgzRFx1REU4MCR7Ym9vc3RlckZhY3Rvcn0ke3RoaXMucmF0ZUJvb3N0ZXJEaXJlY3Rpb24oKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnXHJcblx0XHQvKmNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0XHRpZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwNlx1RkUwRidcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnXHJcblx0XHR9Ki9cclxuXHRcdGlmKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUpe1xyXG5cdFx0XHRkaXJlY3Rpb24gPSAnXHUyQjA2XHVGRTBGJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRpcmVjdGlvblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld0Jvb3N0ZXJGYWtmb3IgPSBwYXJzZUZsb2F0KCh0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyBpbmNyZWFzZVZhbHVlKS50b0ZpeGVkKDEpKTtcclxuXHRcdGlmKG5ld0Jvb3N0ZXJGYWtmb3IgPiA4MCl7XHJcblx0XHRcdG5ld0Jvb3N0ZXJGYWtmb3IgPSA4MDtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld0Jvb3N0ZXJGYWtmb3I7XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gdHJ1ZTtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdGNvbnNvbGUubG9nKGBzdHJlYWtib29zdGVyOiAke3RoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3Rlcn1gKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGRlY3JlYXNlU3RyZWFrYm9vc3RlcihkZWNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHRsZXQgbmV3Qm9vc3RlckZha2ZvciA9IHBhcnNlRmxvYXQoKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtIGRlY3JlYXNlVmFsdWUpLnRvRml4ZWQoMSkpXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdCb29zdGVyRmFrZm9yXHJcblx0XHRpZiAobmV3Qm9vc3RlckZha2ZvciA8IDApe1xyXG5cdFx0XHRuZXdCb29zdGVyRmFrZm9yID0gMFxyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3Qm9vc3RlckZha2ZvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IGZhbHNlO1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQ3JCO0FBOEJPLElBQU0sNkJBQU4sY0FBeUMsaUNBQWlCO0FBQUEsRUE0QmhFLFlBQVlDLE1BQVUsUUFBc0I7QUFDMUMsVUFBTUEsTUFBSyxNQUFNO0FBQ2pCLFNBQUssU0FBUztBQUFBLEVBQ2hCO0FBQUEsRUFFTyxVQUFnQjtBQUN0QixVQUFNLEVBQUUsWUFBWSxJQUFJO0FBQ3hCLGdCQUFZLFNBQVMscUJBQXFCO0FBQzFDLFNBQUssWUFBWSxNQUFNO0FBRXZCLFVBQU0sWUFBWSxZQUFZLFVBQVUsUUFB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QUFJLENBQUMsU0FBUztBQUNaLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxRQUFRLENBQUMsRUFBRSxRQUFRLG1CQUFtQixHQUFHO0FBQ2xEOzs7QUNqWk8sSUFBTSxxQkFBcUI7QUFDM0IsSUFBTSxpQkFBaUI7QUFDdkIsSUFBTSwwQkFBMEI7QUFDaEMsSUFBTSwyQkFBMkI7QUFDakMsSUFBTSxvQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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RUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxR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RUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUdPLFNBQVMsZ0NBQWdDLFFBQXdCO0FBQ3ZFLFFBQU0sY0FBYyxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksd0JBQXdCLE1BQU07QUFDN0UsUUFBTSxVQUFVLHdCQUF3QixXQUFXO0FBQ25ELFNBQU8sUUFBUSxRQUFRLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDaEQ7QUFHTyxTQUFTLGlDQUFpQyxRQUF3QjtBQUN4RSxRQUFNLGNBQWMsS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLGdCQUFnQixNQUFNO0FBQ3JFLFFBQU0sVUFBVSxnQkFBZ0IsV0FBVztBQUMzQyxTQUFPLFFBQVEsUUFBUSxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ2hEO0FBR08sU0FBUyx1QkFBdUIsUUFBd0I7QUFDOUQsUUFBTSxjQUFjLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSxtQkFBbUIsTUFBTTtBQUN4RSxRQUFNLFVBQVUsbUJBQW1CLFdBQVc7QUFDOUMsU0FBTyxRQUFRLFFBQVEsT0FBTyxPQUFPLFNBQVMsQ0FBQztBQUNoRDs7O0EzQ2xKQSxJQUFxQixlQUFyQixjQUEwQyx3QkFBTztBQUFBLEVBQWpEO0FBQUE7QUFJQyxTQUFRLGdCQUFnQixLQUFLLGlCQUFpQjtBQUM5QyxTQUFRLHdCQUF3QixLQUFLLGNBQWMsU0FBUyxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUM7QUFBQTtBQUFBLEVBRWhGLE1BQU0sU0FBUztBQUNkLFlBQVEsSUFBSSxtQ0FBbUM7QUFFL0MsVUFBTSxLQUFLLGFBQWE7QUFFeEIsU0FBSyxjQUFjLElBQUksMkJBQTJCLEtBQUssS0FBSyxJQUFJLENBQUM7QUFHakUsZUFBVyxZQUFZO0FBRXRCLFlBQU0sS0FBSyxnQkFBZ0I7QUFBQSxJQUM1QixHQUFHLEdBQUk7QUFJUCxTQUFLLGdCQUFnQixLQUFLLEtBQUs7QUFDL0IsU0FBSyxVQUFVLE9BQU8sWUFBWSxLQUFLLGdCQUFnQixLQUFLLElBQUksR0FBRyxLQUFLLGFBQWE7QUFFckYsVUFBTSxLQUFLLGdCQUFnQixLQUFLLHFCQUFxQjtBQUdyRCxRQUFJLEtBQUssU0FBUyxPQUFNO0FBQ3ZCLFdBQUssY0FBYyxpQkFBaUIsMEJBQTBCLFlBQVk7QUEwQnpFLGNBQU0sS0FBSyxhQUFhO0FBQ3hCLGNBQU0sS0FBSyxpQkFBaUIsS0FBSyxTQUFTLGNBQWM7QUFHeEQsY0FBTSxLQUFLLGdCQUFnQjtBQUFBLE1BRzVCLENBQUM7QUFBQSxJQUNGO0FBR0EsU0FBSyxjQUFjLFVBQVUsMkJBQTJCLFlBQVk7QUFFbkUsWUFBTSxLQUFLLHNCQUFzQjtBQUFBLElBQ2xDLENBQUM7QUFHRCxRQUFJLEtBQUssU0FBUyxtQkFBa0I7QUFFbkMsV0FBSyxXQUFXO0FBQUEsUUFDZixJQUFJO0FBQUEsUUFDSixNQUFNO0FBQUEsUUFDTixVQUFVLFlBQVk7QUFDckIsZ0JBQU0sS0FBSyxlQUFlLEtBQUsscUJBQXFCO0FBQUEsUUFDckQ7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGO0FBRUEsUUFBSSxLQUFLLFNBQVMsbUJBQWtCO0FBRW5DLFdBQUssV0FBVztBQUFBLFFBQ2YsSUFBSTtBQUFBLFFBQ0osTUFBTTtBQUFBLFFBQ04sVUFBVSxZQUFZO0FBQ3JCLGdCQUFNLEVBQUUsTUFBTSxJQUFJLEtBQUs7QUFDdkIsZ0JBQU0saUJBQWlCLEtBQUssS0FBSyxLQUFLLFNBQVMsY0FBYztBQUM3RCxnQkFBTSxjQUFjLE1BQU0sS0FBSyxZQUFZLEtBQUs7QUFDaEQsZ0JBQU0sb0JBQW9CLEtBQUssU0FBUyxnQkFBZ0IsV0FBVztBQUFBLFFBQ3BFO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUdBLFFBQUksS0FBSyxTQUFTLG1CQUFtQjtBQUVwQyxXQUFLLFdBQVc7QUFBQSxRQUNmLElBQUk7QUFBQSxRQUNKLE1BQU07QUFBQSxRQUNOLFVBQVUsWUFBWTtBQUNOLGdCQUFNLEtBQUssVUFBVTtBQUFBLFFBQ3pCO0FBQUEsTUFFYixDQUFDO0FBQUEsSUFDRjtBQUdBLFNBQUssV0FBVztBQUFBLE1BQ2YsSUFBSTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sVUFBVSxZQUFZO0FBQ3JCLGNBQU0sRUFBRSxNQUFNLElBQUk7QUFDbEIsY0FBTSxjQUFjLE1BQU0sS0FBSyxZQUFZLEtBQUs7QUFDaEQsY0FBTSxvQkFBb0IsS0FBSyxTQUFTLGdCQUFnQixXQUFXO0FBQUEsTUFDcEU7QUFBQSxJQUNELENBQUM7QUFJRCxTQUFLLFdBQVc7QUFBQSxNQUNmLElBQUk7QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFVBQVUsWUFBWTtBQUNyQixjQUFNLEtBQUssc0JBQXNCO0FBQUEsTUFDbEM7QUFBQSxJQUNELENBQUM7QUFJRCxTQUFLLFdBQVc7QUFBQSxNQUNmLElBQUk7QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFVBQVUsWUFBWTtBQUNyQixjQUFNLHFCQUFxQixLQUFLLFNBQVMsc0JBQXNCLEtBQUssU0FBUyxvQkFBb0I7QUFBQSxNQUNsRztBQUFBLElBQ0QsQ0FBQztBQUFBLEVBRUY7QUFBQSxFQUdHLE1BQWMsWUFBWTtBQUN0QixVQUFNLEtBQUssMEJBQTBCO0FBQ3JDLFNBQUssU0FBUyxjQUFjO0FBQzVCLFNBQUssU0FBUyxlQUFlO0FBQzdCLFNBQUssU0FBUyxpQkFBaUI7QUFDL0IsU0FBSyxTQUFTLG9CQUFvQjtBQUNsQyxTQUFLLFNBQVMscUJBQXFCO0FBQ25DLFVBQU0sS0FBSyxTQUFTLEtBQUssUUFBUTtBQUNqQyxVQUFNLEtBQUssaUJBQWlCLENBQUM7QUFDN0IsVUFBTSxLQUFLLGdCQUFnQixLQUFLLHFCQUFxQjtBQUNyRCxRQUFJLG9CQUFvQixLQUFLLEtBQUsseURBQXlELEtBQUssU0FBUyw4QkFBOEIsRUFBRSxLQUFLO0FBQUEsRUFDbEo7QUFBQSxFQUVBLE1BQWMsZUFBZSx1QkFBd0M7QUFDdkUsU0FBSyxTQUFTLHdCQUF3QixPQUFPLElBQUksS0FBSyxHQUFHLFlBQVk7QUFDckUsVUFBTSxLQUFLLGFBQWE7QUFFeEIsVUFBTSxFQUFDLE1BQUssSUFBSSxLQUFLO0FBQ3JCLFVBQU0saUJBQWlCLEtBQUssS0FBSyxLQUFLLFNBQVMsY0FBYztBQUM3RCxVQUFNLGNBQWMsTUFBTSxLQUFLLFlBQVksS0FBSztBQUNoRCxVQUFNLG9CQUFvQixLQUFLLFNBQVMsZ0JBQWdCLFdBQVc7QUFDbkUsVUFBTSxLQUFLLGVBQWU7QUFDMUIsVUFBTSxlQUF3QixNQUFNLFdBQVcsS0FBSyxLQUFLLEtBQUssU0FBUyxhQUFhLEtBQUssU0FBUyxhQUFhO0FBQy9HLFlBQVEsSUFBSSx5Q0FBeUMsYUFBYSxRQUFRO0FBRTFFLFFBQUksaUJBQWlCO0FBRXJCLGVBQVcsWUFBWSxjQUFjO0FBQ3BDLFlBQU0sT0FBTztBQUNiLFlBQU0sZUFBZSxNQUFNLElBQUksTUFBTSxLQUFLLElBQUk7QUFDOUMsWUFBTSxhQUFhLEtBQUssSUFBSSxVQUFVLG9CQUFvQiw2QkFBWTtBQUN0RSxVQUFJLGNBQWMsV0FBVyxRQUFRLFdBQVcsS0FBSyxTQUFTLEtBQUssTUFBTTtBQUN4RSxnQkFBUSxLQUFLLFFBQVEsS0FBSyxtQ0FBbUM7QUFDN0Q7QUFBQSxNQUNEO0FBRUEsWUFBTSxhQUFhLDRCQUE0QixjQUFjLFNBQVMsUUFBUTtBQUM5RSxZQUFNLGlCQUFpQixlQUFlLFVBQVU7QUFDaEQsWUFBTTtBQUFBLFFBQ0w7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0QsSUFBSSwrQkFBK0IsY0FBYyxTQUFTLFVBQVUsS0FBSyxTQUFTLHNCQUFzQixLQUFLLFNBQVMsb0JBQW9CO0FBQzFJLFlBQU0scUJBQTZCLDZCQUE2QixXQUFXLGtCQUFrQixTQUFTO0FBQ3RHLFlBQU0sZUFBZSxtQkFBbUIsS0FBSyxJQUFJO0FBQ2pELFlBQU0sZUFBZSxjQUFjLElBQUk7QUFDdkMsWUFBTSxjQUFjLFlBQVksWUFBWTtBQUM1QyxZQUFNLFVBQVUsYUFBYSxvQkFBb0IsSUFBSSxDQUFDO0FBQ3RELFlBQU0sZUFBZSxvQkFBb0IsZ0JBQWdCLGNBQWMsYUFBYSxTQUFTLGtCQUFrQjtBQUcvRyxjQUFRLElBQUksbUJBQW1CLFNBQVMsb0JBQW9CLFNBQVMsTUFBTTtBQUUzRSxVQUFJO0FBQ0gsY0FBTSxLQUFLLElBQUksWUFBWSxtQkFBbUIsTUFBTSxDQUFDLGdCQUFnQjtBQUNwRSxjQUFJLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxZQUFZLEtBQUssR0FBRztBQUNsRiw4QkFBa0IscUJBQXFCLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxZQUFZO0FBQzlHLGlCQUFLLGlCQUFpQixxQkFBcUIsNkJBQTZCLGdDQUFnQyxZQUFZLENBQUM7QUFBQSxVQUN0SCxXQUFXLEVBQUUsbUJBQW1CLGNBQWM7QUFDN0MsOEJBQWtCLHFCQUFxQiw2QkFBNkIsS0FBSyxZQUFZO0FBQ3JGLGlCQUFLLGlCQUFpQixxQkFBcUIsNkJBQTZCLEtBQUssWUFBWSxDQUFDO0FBQUEsVUFDM0Y7QUFFQSxjQUFJLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZLEtBQUssS0FBSyxpQkFBaUIsYUFBYTtBQUNoSCw4QkFBa0IsaUJBQWlCLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZO0FBQ3hHLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksYUFBYSxHQUFHLFlBQVksQ0FBQztBQUFBLFVBQzlHLFdBQVcsRUFBRSxpQkFBaUIsY0FBYztBQUMzQyw4QkFBa0IsaUJBQWlCLDZCQUE2QixLQUFLLFlBQVk7QUFDakYsaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxZQUFZLENBQUM7QUFBQSxVQUN2RjtBQUVBLGNBQUksNkJBQTZCLFlBQVksbUJBQW1CLEdBQUcsY0FBYyxLQUFLLEdBQUc7QUFDeEYsOEJBQWtCLGlCQUFpQiw2QkFBNkIsWUFBWSxtQkFBbUIsR0FBRyxjQUFjO0FBQ2hILGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksbUJBQW1CLEdBQUcsY0FBYyxDQUFDO0FBQUEsVUFDdEgsV0FBVyxFQUFFLHVCQUF1QixjQUFjO0FBQ2pELDhCQUFrQixpQkFBaUIsNkJBQTZCLEtBQUssY0FBYztBQUNuRixpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixLQUFLLGNBQWMsQ0FBQztBQUFBLFVBQ3pGO0FBRUEsY0FBSSw2QkFBNkIsWUFBWSxjQUFjLEdBQUcsV0FBVyxLQUFLLEdBQUc7QUFDaEYsOEJBQWtCLGlCQUFpQiw2QkFBNkIsWUFBWSxjQUFjLEdBQUcsV0FBVztBQUN4RyxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGNBQWMsR0FBRyxXQUFXLENBQUM7QUFBQSxVQUM5RyxXQUFXLEVBQUUsa0JBQWtCLGNBQWM7QUFDNUMsOEJBQWtCLGlCQUFpQiw2QkFBNkIsS0FBSyxXQUFXO0FBQ2hGLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssV0FBVyxDQUFDO0FBQUEsVUFDdEY7QUFFQSxjQUFJLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPLEtBQUssR0FBRztBQUM3RSw4QkFBa0IsaUJBQWlCLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPO0FBQ3JHLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUFBLFVBQzNHLFdBQVcsRUFBRSxtQkFBbUIsY0FBYztBQUM3Qyw4QkFBa0IsaUJBQWlCLDZCQUE2QixLQUFLLE9BQU87QUFDNUUsaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxPQUFPLENBQUM7QUFBQSxVQUNsRjtBQUVBLGNBQUksNkJBQTZCLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCLEtBQUssR0FBRztBQUM3Ryw4QkFBa0IsaUJBQWlCLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQjtBQUNySSxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQixDQUFDO0FBQUEsVUFDM0ksV0FBVyxFQUFFLHdDQUF3QyxjQUFjO0FBQ2xFLDhCQUFrQixpQkFBaUIsNkJBQTZCLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCO0FBQ3JJLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssa0JBQWtCLENBQUM7QUFBQSxVQUU3RjtBQUdBLGVBQUssaUJBQWlCLGFBQWEsY0FBYyxnQkFBZ0IsYUFBYSxTQUFTLG9CQUFvQixZQUFZO0FBQUEsUUFDeEgsQ0FBQztBQUFBLE1BQ0YsU0FBU0MsSUFBUDtBQUNELGFBQUlBLE1BQUEsZ0JBQUFBLEdBQUcsVUFBUyxrQkFBa0I7QUFDakMsZ0JBQU0sZUFBZSxnRUFBZ0UsS0FBSyxRQUFRQSxHQUFFO0FBQ3BHLGNBQUksd0JBQU8sY0FBYyxHQUFJO0FBQzdCLGtCQUFRLE1BQU0sWUFBWTtBQUFBLFFBQzNCO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFDQSxRQUFJLGlCQUFpQixHQUFHO0FBQ3ZCLFVBQUksZ0JBQWdCO0FBQ3BCLFVBQUksS0FBSyxTQUFTLG1CQUFrQjtBQUNuQyx3QkFBZ0IsS0FBSyxTQUFTO0FBQUEsTUFDL0I7QUFDQSxVQUFJLHdCQUFPLEdBQUcsaUJBQWlCLCtCQUErQjtBQUM5RCxjQUFRLElBQUksR0FBRyxpQkFBaUIsK0JBQStCO0FBQUEsSUFDaEU7QUFHQSxlQUFXLFlBQVk7QUFFdEIsWUFBTSxZQUFtQixxQkFBcUIsS0FBSyxTQUFTLFdBQVc7QUFDdkUsVUFBSSx3QkFBTyxzQkFBc0IsVUFBVSxnQkFBZ0IsVUFBVSxhQUFhO0FBQ2xGLGNBQVEsSUFBSSxjQUFjLFVBQVUsVUFBVSxVQUFVLGFBQWE7QUFDckUsWUFBTSxLQUFLLHVCQUF1QixLQUFLLFNBQVMsZ0JBQWdCLFNBQVM7QUFDekUsWUFBTSxLQUFLLGdDQUFnQyxLQUFLLFNBQVMsZ0JBQWdCLEtBQUssU0FBUyxXQUFXO0FBQ2xHLFlBQU0sS0FBSyxlQUFlO0FBQzFCLFlBQU0sS0FBSyxnQkFBZ0IscUJBQXFCO0FBQUEsSUFDakQsR0FBRyxHQUFJO0FBRVAsUUFBSSxvQkFBb0IsS0FBSyxLQUFLO0FBQUEsNkJBQXdFO0FBQUE7QUFBQSwyQkFBc0QsS0FBSyxTQUFTO0FBQUE7QUFBQSxnRkFBdUcsRUFBRSxLQUFLO0FBQUEsRUFDN1I7QUFBQSxFQUVRLGlCQUFpQixhQUFrQixjQUFzQixnQkFBd0IsYUFBcUIsU0FBaUIsb0JBQTRCLGNBQXNCO0FBQ2hMLGdCQUFZLGFBQWEsSUFBSSxjQUFjLFlBQVksYUFBYSxHQUFHLFlBQVk7QUFDbkYsZ0JBQVksbUJBQW1CLElBQUksY0FBYyxZQUFZLG1CQUFtQixHQUFHLGNBQWM7QUFDakcsZ0JBQVksY0FBYyxJQUFJLGNBQWMsWUFBWSxjQUFjLEdBQUcsV0FBVztBQUNwRixnQkFBWSxlQUFlLElBQUksY0FBYyxZQUFZLGVBQWUsR0FBRyxPQUFPO0FBQ2xGLGdCQUFZLG9DQUFvQyxJQUFJLGNBQWMsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0I7QUFDdkksZ0JBQVksZUFBZSxJQUFJLGNBQWMsWUFBWSxlQUFlLEdBQUcsWUFBWTtBQUFBLEVBQ3hGO0FBQUEsRUFFQSxXQUFXO0FBQ1YsWUFBUSxJQUFJLHFDQUFxQztBQUdqRCxRQUFJLEtBQUssWUFBWSxNQUFNO0FBQzFCLG9CQUFjLEtBQUssT0FBTztBQUMxQixXQUFLLFVBQVU7QUFBQSxJQUNoQjtBQUFBLEVBQ0Q7QUFBQSxFQUVBLE1BQU0sd0JBQXVCO0FBblY5QjtBQW9WRSxVQUFNLE9BQW9CLEtBQUssSUFBSSxVQUFVLGNBQWM7QUFDM0QsUUFBSSxRQUFRLE1BQU07QUFDakIsY0FBUSxNQUFNLHNDQUFzQztBQUFBLElBQ3JEO0FBRUEsUUFBSSwrQkFBK0I7QUFHbkMsVUFBTSxhQUFhLEtBQUssSUFBSSxVQUFVLG9CQUFvQiw2QkFBWTtBQUN0RSxVQUFNLGVBQWUseUNBQVksT0FBTztBQUN4QyxVQUFNLFdBQVcseUNBQVksS0FBSztBQUVsQyxRQUFJLGlCQUFpQjtBQUNyQixRQUFJLGFBQWE7QUFDakIsUUFBSSxxQkFBcUI7QUFFekIsUUFBSSxpQkFBaUIsVUFBYSxhQUFhLFFBQVc7QUFDekQsbUJBQWEsNEJBQTRCLGNBQWMsUUFBUTtBQUMvRCx1QkFBaUIsZUFBZSxVQUFVO0FBRzFDLFVBQUksaUJBQWlCLFFBQVEsYUFBYSxNQUFNO0FBQy9DLGNBQU0sRUFBRSxXQUFXLGtCQUFrQixVQUFVLElBQUksK0JBQStCLGNBQWMsVUFBVSxLQUFLLFNBQVMsc0JBQXNCLEtBQUssU0FBUyxvQkFBb0I7QUFDaEwsNkJBQXFCLDZCQUE2QixXQUFXLGtCQUFrQixTQUFTO0FBQUEsTUFDekY7QUFBQSxJQUNEO0FBRUEsUUFBSSxlQUFlO0FBQ25CLFFBQUksZUFBZTtBQUNuQixRQUFJLGNBQWM7QUFDbEIsUUFBSSxVQUFVO0FBRWQsUUFBSSxTQUFTLE1BQU07QUFDbEIscUJBQWUsb0JBQW1CLFVBQUssU0FBTCxZQUFhLEVBQUU7QUFDakQscUJBQWUsY0FBYyxJQUFJO0FBQ2pDLG9CQUFjLFlBQVksWUFBWTtBQUN0QyxnQkFBVSxhQUFhLG9CQUFvQixJQUFJLENBQUM7QUFFaEQsWUFBTSxlQUFlLG9CQUFvQixnQkFBZ0IsY0FBYyxhQUFhLFNBQVMsa0JBQWtCO0FBRS9HLFVBQUk7QUFDSCxjQUFNLEtBQUssSUFBSSxZQUFZLG1CQUFtQixNQUFNLENBQUMsZ0JBQWdCO0FBQ3BFLGNBQUksYUFBYTtBQUNoQixnQkFBSSxpQkFBaUI7QUFDckIsZ0JBQUksNkJBQTZCLFlBQVksZUFBZSxHQUFHLFlBQVksS0FBSyxHQUFFO0FBQ2pGLHNCQUFRLElBQUksbUJBQW1CO0FBQy9CLGdDQUFrQixxQkFBbUIsNkJBQTZCLFlBQVksZUFBZSxHQUFHLFlBQVk7QUFDNUcsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixxQkFBcUIsNkJBQTZCLGdDQUFnQyxZQUFZLENBQUM7QUFDdEksbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFXLEVBQUUsbUJBQW1CLGNBQWE7QUFDNUMsZ0NBQWtCLHFCQUFtQiw2QkFBNkIsS0FBSyxZQUFZO0FBQ25GLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIscUJBQXFCLDZCQUE2QixLQUFLLFlBQVksQ0FBQztBQUMzRyxtQkFBSyxnQkFBZ0IsUUFBUTtBQUM3Qiw2Q0FBK0I7QUFBQSxZQUNoQztBQUVBLGdCQUFJLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZLEtBQUssS0FBSyxpQkFBaUIsYUFBWTtBQUMvRyxnQ0FBa0IsaUJBQWUsNkJBQTZCLFlBQVksYUFBYSxHQUFHLFlBQVk7QUFDdEcsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksYUFBYSxHQUFHLFlBQVksQ0FBQztBQUM5SCxtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVcsRUFBRSxpQkFBaUIsY0FBYTtBQUMxQyxnQ0FBa0IsaUJBQWUsNkJBQTZCLEtBQUssWUFBWTtBQUMvRSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxZQUFZLENBQUM7QUFDdkcsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QjtBQUVBLGdCQUFJLDZCQUE2QixZQUFZLG1CQUFtQixHQUFHLGNBQWMsS0FBSyxHQUFFO0FBQ3ZGLGdDQUFrQixpQkFBZSw2QkFBNkIsWUFBWSxtQkFBbUIsR0FBRyxjQUFjO0FBQzlHLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUN0SSxtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVUsRUFBRSx1QkFBdUIsY0FBYTtBQUMvQyxnQ0FBa0IsaUJBQWUsNkJBQTZCLEtBQUssY0FBYztBQUNqRixvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxjQUFjLENBQUM7QUFDekcsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QjtBQUVBLGdCQUFJLDZCQUE2QixZQUFZLGNBQWMsR0FBRyxXQUFXLEtBQUssR0FBRTtBQUMvRSxnQ0FBa0IsaUJBQWUsNkJBQTZCLFlBQVksY0FBYyxHQUFHLFdBQVc7QUFDdEcsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksY0FBYyxHQUFHLFdBQVcsQ0FBQztBQUM5SCxtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVUsRUFBRSxrQkFBa0IsY0FBYTtBQUMxQyxnQ0FBa0IsaUJBQWUsNkJBQTZCLEtBQUssV0FBVztBQUM5RSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxXQUFXLENBQUM7QUFDdEcsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QjtBQUVBLGdCQUFJLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPLEtBQUssR0FBRTtBQUM1RSxnQ0FBa0IsaUJBQWUsNkJBQTZCLFlBQVksZUFBZSxHQUFHLE9BQU87QUFDbkcsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUMzSCxtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVUsRUFBRSxtQkFBbUIsY0FBYTtBQUMzQyxnQ0FBa0IsaUJBQWUsNkJBQTZCLEtBQUssT0FBTztBQUMxRSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxPQUFPLENBQUM7QUFDbEcsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QjtBQUVBLGdCQUFJLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQixLQUFLLEdBQUU7QUFDNUcsZ0NBQWtCLGlCQUFlLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQjtBQUNuSSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0IsQ0FBQztBQUMzSixtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVUsRUFBRSx3Q0FBd0MsY0FBYTtBQUNoRSxnQ0FBa0IsaUJBQWUsNkJBQTZCLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCO0FBQ25JLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixLQUFLLGtCQUFrQixDQUFDO0FBQzdHLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUI7QUFDQSxvQkFBUSxJQUFJLG1CQUFtQixnQkFBZ0I7QUFDL0MsZ0JBQUksaUJBQWlCLEdBQUU7QUFDdEIsb0JBQU0sZ0JBQWdCLHVCQUF1QixrQkFBa0IsS0FBSyxTQUFTLHFCQUFxQixLQUFLLFNBQVMsY0FBYztBQUM5SCxrQkFBSSx3QkFBTyxhQUFhO0FBQ3hCLHNCQUFRLElBQUksYUFBYTtBQUFBLFlBQzFCO0FBRUEsaUJBQUssaUJBQWlCLGFBQWEsY0FBYyxnQkFBZ0IsYUFBYSxTQUFTLG9CQUFvQixZQUFZO0FBQUEsVUFDeEg7QUFBQSxRQUNELENBQUM7QUFBQSxNQUNGLFNBQVNBLElBQVA7QUFDRCxhQUFJQSxNQUFBLGdCQUFBQSxHQUFHLFVBQVMsa0JBQWtCO0FBQ2pDLGdCQUFNLGVBQWUsZ0VBQWdFLEtBQUssUUFBUUEsR0FBRTtBQUNwRyxjQUFJLHdCQUFPLGNBQWMsR0FBSTtBQUM3QixrQkFBUSxNQUFNLFlBQVk7QUFBQSxRQUMzQjtBQUFBLE1BQ0Q7QUFDQSxVQUFJLHdCQUFPLHdCQUF3QjtBQUNuQyxjQUFRLElBQUksd0JBQXdCO0FBRXBDLFlBQU0sS0FBSyxnQkFBZ0IsS0FBSyxxQkFBcUI7QUFBQSxJQUN0RCxPQUFPO0FBQ04sY0FBUSxNQUFNLHNFQUFzRTtBQUFBLElBQ3JGO0FBQ0EsUUFBSSw4QkFBNkI7QUFDaEMsWUFBTSxLQUFLLDhCQUE4QjtBQUN6QyxZQUFNLEtBQUssK0JBQStCO0FBQUEsSUFDM0M7QUFBQSxFQUNEO0FBQUEsRUFHQSxNQUFNLGtCQUFpQjtBQUN0QixRQUFJLFFBQVE7QUFDWixRQUFHLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSyxTQUFTLHVCQUF1QixZQUFZLENBQUMsR0FBRTtBQUMvRSxXQUFLLFNBQVMsd0JBQXdCO0FBQ3RDLFdBQUssU0FBUyx3QkFBd0IsT0FBTyxPQUFPLEVBQUUsT0FBTyxZQUFZO0FBQ3pFLFlBQU0sS0FBSyxhQUFhO0FBQ3hCLGNBQVEsSUFBSSx5QkFBeUI7QUFDckMsY0FBUTtBQUFBLElBQ1Q7QUFDQSxRQUFHLENBQUMsZUFBZSxPQUFPLE9BQU8sS0FBSyxTQUFTLHdCQUF3QixZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsT0FBTyxPQUFPLEtBQUssU0FBUyx3QkFBd0IsWUFBWSxDQUFDLEdBQUU7QUFDdEssV0FBSyxTQUFTLHlCQUF5QjtBQUN2QyxXQUFLLFNBQVMseUJBQXlCLE9BQU8sT0FBTyxFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQUUsT0FBTyxZQUFZO0FBQzdGLFdBQUssc0JBQXNCLENBQUM7QUFFNUIsWUFBTSxLQUFLLGFBQWE7QUFDeEIsWUFBTSxLQUFLLGdCQUFnQixLQUFLLHFCQUFxQjtBQUNyRCxjQUFRLElBQUksMEJBQTBCO0FBQ3RDLGNBQVE7QUFBQSxJQUNUO0FBQ0EsUUFBRyxlQUFlLE9BQU8sT0FBTyxLQUFLLFNBQVMsd0JBQXdCLFlBQVksQ0FBQyxLQUFLLEtBQUssU0FBUywwQkFBMEIsR0FBRTtBQUNqSSxXQUFLLFNBQVMseUJBQXlCO0FBQ3ZDLFdBQUssU0FBUyx5QkFBeUIsT0FBTyxPQUFPLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxPQUFPLFlBQVk7QUFDN0YsWUFBTSxLQUFLLGFBQWE7QUFDeEIsY0FBUTtBQUFBLElBQ1Q7QUFDQSxRQUFJLE9BQU07QUFFVCxZQUFNLEtBQUssaUJBQWlCLEtBQUssU0FBUyxjQUFjO0FBQUEsSUFDekQ7QUFBQSxFQUVEO0FBQUEsRUFFQSxNQUFNLGdDQUErQjtBQUNwQyxRQUFJLDJCQUEyQixLQUFLLFNBQVM7QUFDdkMsUUFBSSwyQkFBMkIsR0FBRTtBQUN0QztBQUNBLFdBQUssU0FBUyx3QkFBd0I7QUFDdEMsWUFBTSxLQUFLLGFBQWE7QUFFeEIsVUFBRyw0QkFBNEIsR0FBRTtBQUVoQyxjQUFNLEtBQUssaUJBQWlCLEtBQUssU0FBUyxjQUFjO0FBQ3hELGdCQUFRLElBQUksR0FBRyxpREFBaUQ7QUFBQSxNQUNqRSxXQUFXLDRCQUE0QixHQUFHO0FBQ3pDLGFBQUssc0JBQXNCLEdBQUc7QUFFOUIsY0FBTSxLQUFLLGFBQWE7QUFDeEIsY0FBTSxLQUFLLGdCQUFnQixLQUFLLHFCQUFxQjtBQUNyRCxjQUFNLEtBQUssaUJBQWlCLHVCQUF1QjtBQUNuRCxjQUFNLFVBQVUsaUNBQWlDLDJCQUEyQixLQUFLLFNBQVMscUJBQXFCLEtBQUssU0FBUyxjQUFjO0FBQzNJLGdCQUFRLElBQUksNEJBQTRCLHFDQUFxQztBQUM3RSxZQUFJLHdCQUFPLE9BQU87QUFDbEIsZ0JBQVEsSUFBSSxPQUFPO0FBQUEsTUFDcEIsT0FBTztBQUVOLGdCQUFRLElBQUksR0FBRyxpREFBaUQ7QUFBQSxNQUNqRTtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLGlDQUFnQztBQUNyQyxRQUFHLGVBQWUsT0FBTyxPQUFPLEtBQUssU0FBUyx3QkFBd0IsWUFBWSxDQUFDLEdBQUU7QUFDcEYsWUFBTSxLQUFLLGtDQUFrQztBQUFBLElBQzlDLFdBQVcsVUFBVSxPQUFPLE9BQU8sS0FBSyxTQUFTLHdCQUF3QixZQUFZLENBQUMsR0FBRTtBQUV2RixjQUFRLElBQUksOENBQThDO0FBQUEsSUFDM0QsT0FBTztBQUNOLFdBQUssU0FBUyx5QkFBeUIsT0FBTyxPQUFPLEVBQUUsT0FBTyxZQUFZO0FBQzFFLFdBQUssU0FBUyx5QkFBeUI7QUFDdkMsWUFBTSxLQUFLLGFBQWE7QUFBQSxJQUN6QjtBQUFBLEVBQ0Q7QUFBQSxFQUVBLE1BQWMsb0NBQW9DO0FBQ2pELFFBQUksNEJBQTRCLEtBQUssU0FBUztBQUM5QyxRQUFJLDRCQUE0QixHQUFHO0FBQ2xDO0FBQ0EsV0FBSyxTQUFTLHlCQUF5QixPQUFPLE9BQU8sRUFBRSxPQUFPLFlBQVk7QUFDMUUsV0FBSyxTQUFTLHlCQUF5QjtBQUN2QyxZQUFNLEtBQUssYUFBYTtBQUV4QixZQUFNLEtBQUssc0NBQXNDLHlCQUF5QjtBQUFBLElBQzNFO0FBQUEsRUFDRDtBQUFBLEVBRUEsTUFBYyxzQ0FBc0MsMkJBQW1DO0FBQ3RGLFFBQUksNkJBQTZCLEdBQUc7QUFFbkMsWUFBTSxLQUFLLGlCQUFpQixLQUFLLFNBQVMsY0FBYztBQUN4RCxjQUFRLElBQUksR0FBRyx1REFBdUQ7QUFBQSxJQUN2RSxXQUFXLDZCQUE2QixHQUFHO0FBQzFDLFdBQUssc0JBQXNCLENBQUM7QUFFNUIsWUFBTSxLQUFLLGFBQWE7QUFDeEIsWUFBTSxLQUFLLGlCQUFpQix3QkFBd0I7QUFDcEQsY0FBUSxJQUFJLDZCQUE2QixpREFBaUQ7QUFDMUYsWUFBTSxVQUFVLGdDQUFnQyw0QkFBNEIsS0FBSyxTQUFTLHFCQUFxQixLQUFLLFNBQVMsY0FBYztBQUMzSSxVQUFJLHdCQUFPLE9BQU87QUFDbEIsY0FBUSxJQUFJLE9BQU87QUFBQSxJQUNwQixPQUFPO0FBRU4sY0FBUSxJQUFJLEdBQUcsdURBQXVEO0FBQUEsSUFDdkU7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLGdCQUFnQixXQUEyQjtBQUNoRCxVQUFNLGVBQWUsa0JBQWtCLEtBQUssU0FBUyxZQUFZO0FBQ2pFLFVBQU0sc0JBQXNCLEtBQUssU0FBUyxlQUFlLGFBQWEsV0FBUyxhQUFhLGFBQWEsYUFBYSxVQUFRO0FBQzlILFVBQU0scUJBQXFCO0FBQzNCLFVBQU0sWUFBWSxLQUFLLE1BQU0scUJBQXFCLGtCQUFrQjtBQUNwRSxVQUFNLGdCQUFnQixLQUFLLFNBQVM7QUFDcEMsY0FBVSxRQUFRLGtCQUFXLEtBQUssU0FBUyxpQkFBaUIsS0FBSyxrQkFBa0Isb0JBQW9CLFNBQVMsY0FBTyxnQkFBZ0IsS0FBSyxxQkFBcUIsR0FBRztBQUFBLEVBQ3JLO0FBQUEsRUFFUSx1QkFBc0I7QUFDN0IsUUFBSSxZQUFZO0FBT2hCLFFBQUcsS0FBSyxTQUFTLG1CQUFrQjtBQUNsQyxrQkFBWTtBQUFBLElBQ2IsT0FBTztBQUNOLGtCQUFZO0FBQUEsSUFDYjtBQUNBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFFUSxrQkFBa0Isb0JBQTRCLFdBQW1CO0FBQ3hFLFFBQUksY0FBYztBQUNsQixhQUFTQyxLQUFJLEdBQUdBLE1BQUssb0JBQW9CQSxNQUFLO0FBQzdDLFVBQUlBLE1BQUssV0FBVztBQUNuQix1QkFBZTtBQUFBLE1BQ2hCLE9BQU87QUFDTix1QkFBZTtBQUFBLE1BQ2hCO0FBQUEsSUFDRDtBQUNBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFFQSxNQUFNLGVBQWU7QUFDcEIsU0FBSyxXQUFXLE9BQU8sT0FBTyxDQUFDLEdBQUcsaUJBQWlCLE1BQU0sS0FBSyxTQUFTLENBQUM7QUFDeEUsWUFBUSxJQUFJLGdCQUFnQjtBQUFBLEVBQzdCO0FBQUEsRUFHQSxNQUFNLGVBQWU7QUFDcEIsVUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQUEsRUFDbEM7QUFBQSxFQUVBLE1BQU0saUJBQWlCLGFBQXNDO0FBQzVELFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksZ0JBQWdCLEtBQUssU0FBUztBQUNsQyxRQUFJLEtBQUssU0FBUyxtQkFBa0I7QUFDbkMsc0JBQWdCLEtBQUssU0FBUztBQUFBLElBQy9CO0FBRUEsU0FBSyxTQUFTLGVBQWUsZUFBZSxnQkFBZ0IsaUJBQWlCLEtBQUssU0FBUztBQUMzRixVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFFakMsV0FBTyxLQUFLLGlCQUFpQixLQUFLLFNBQVMsY0FBYztBQUFBLEVBQzFEO0FBQUEsRUFFQSxNQUFNLHNCQUFzQixlQUFxQjtBQUNoRCxRQUFJLG1CQUFtQixZQUFZLEtBQUssU0FBUyxnQkFBZ0IsZUFBZSxRQUFRLENBQUMsQ0FBQztBQUMxRixRQUFHLG1CQUFtQixJQUFHO0FBQ3hCLHlCQUFtQjtBQUFBLElBQ3BCO0FBQ0EsU0FBSyxTQUFTLGdCQUFnQjtBQUM5QixTQUFLLFNBQVMsb0JBQW9CO0FBQ2xDLFVBQU0sS0FBSyxTQUFTLEtBQUssUUFBUTtBQUNqQyxZQUFRLElBQUksa0JBQWtCLEtBQUssU0FBUyxlQUFlO0FBQUEsRUFDNUQ7QUFBQSxFQUdBLE1BQU0sc0JBQXNCLGVBQXFCO0FBQ2hELFFBQUksbUJBQW1CLFlBQVksS0FBSyxTQUFTLGdCQUFnQixlQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQzFGLFNBQUssU0FBUyxnQkFBZ0I7QUFDOUIsUUFBSSxtQkFBbUIsR0FBRTtBQUN4Qix5QkFBbUI7QUFBQSxJQUNwQjtBQUNBLFNBQUssU0FBUyxnQkFBZ0I7QUFDOUIsU0FBSyxTQUFTLG9CQUFvQjtBQUNsQyxVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFBQSxFQUNsQztBQUFBLEVBS0EsTUFBTSxpQkFBaUIsZ0JBQXlDO0FBQy9ELFVBQU0sZUFBZSxJQUFJLE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CO0FBQzNFLFFBQUksZ0JBQWdCLE1BQU07QUFDekIsY0FBUSxJQUFJLFFBQVEsa0NBQWtDO0FBQ3RELGFBQU87QUFBQSxJQUNSO0FBQ0EsVUFBTSxPQUFPO0FBR2IsVUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QyxRQUFJLFlBQTJCO0FBQy9CLFFBQUksYUFBNEI7QUFDaEMsUUFBSSxhQUE0QjtBQUNoQyxRQUFJLGFBQTRCO0FBQ2hDLFFBQUksTUFBcUI7QUFDekIsUUFBSSxRQUF1QjtBQUMzQixRQUFJLE9BQXNCO0FBQzFCLFFBQUksU0FBd0I7QUFDNUIsUUFBSSxPQUFzQjtBQUMxQixRQUFJLFNBQXdCO0FBQzVCLFFBQUksT0FBc0I7QUFDMUIsUUFBSSxTQUF3QjtBQUU1QixVQUFNLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDaEMsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLE1BQU0sUUFBUUEsTUFBSztBQUN0QyxZQUFNLE9BQU8sTUFBTUEsRUFBQyxFQUFFLEtBQUs7QUFDM0IsVUFBSSxTQUFTLG1CQUFtQjtBQUMvQixZQUFJLGNBQWMsTUFBTTtBQUN2QixzQkFBWUE7QUFBQSxRQUNiO0FBQUEsTUFDRDtBQUNBLFVBQUksU0FBUyx3QkFBd0I7QUFDcEMsWUFBSSxlQUFlLE1BQU07QUFDeEIsdUJBQWFBO0FBQUEsUUFDZDtBQUFBLE1BQ0Q7QUFDQSxVQUFJLFNBQVMseUJBQXlCO0FBQ3JDLFlBQUksZUFBZSxNQUFNO0FBQ3hCLHVCQUFhQTtBQUFBLFFBQ2Q7QUFBQSxNQUNEO0FBQ0EsVUFBSSxTQUFTLGtCQUFrQjtBQUM5QixZQUFJLGVBQWUsTUFBTTtBQUN4Qix1QkFBYUE7QUFBQSxRQUNkO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxVQUFNLFlBQVksS0FBSyxTQUFTO0FBRWhDLFVBQU0sUUFBUSxrQkFBa0IsU0FBUztBQUN6QyxRQUFJLGNBQWMsS0FBSyxTQUFTO0FBQ2hDLFFBQUksZUFBZTtBQUNuQixRQUFJLEtBQUssU0FBUyxjQUFjLE1BQU0sT0FBTTtBQUUzQyxVQUFJLHdCQUFPLFFBQVEsMENBQTBDLE1BQU0sUUFBUTtBQUUzRSxxQkFBZSxxQkFBcUIsS0FBSyxTQUFTLGFBQWEsTUFBTSxLQUFLO0FBQzFFLFdBQUssU0FBUyxjQUFjLE1BQU07QUFDbEMsb0JBQWMsTUFBTTtBQUNwQixXQUFLLFNBQVMsaUJBQWlCLE1BQU07QUFDckMsWUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQUEsSUFDbEM7QUFFQSxVQUFNLGlCQUFpQixjQUFjO0FBQ3JDLFVBQU0sa0JBQWtCLHNCQUFzQixNQUFNLFFBQVEsc0JBQXNCLFlBQVksd0hBQXdILFlBQVksMERBQTBELGlCQUFpQixjQUFjLE1BQU0sU0FBUyxhQUFhLE1BQU0sYUFBYTtBQUMxVyxVQUFNLGlCQUFpQiwwQkFBMEIsMkJBQTJCLEtBQUssU0FBUyxxQkFBcUIsS0FBSyxTQUFTLGlCQUFpQixhQUFhLEtBQUssU0FBUyx3QkFBd0I7QUFDak0sVUFBTSx3QkFBaUMsSUFBSSxLQUFLLFNBQVM7QUFDekQsVUFBTSxrQkFBa0IsMkJBQTJCLDRCQUE0QixLQUFLLFNBQVMscUJBQXFCLEtBQUssU0FBUyxpQkFBaUIsa0JBQWtCLEtBQUssU0FBUyx5QkFBeUIsNklBQTZJLEtBQUssU0FBUyx5QkFBeUIsMERBQTBELHdCQUF3QjtBQUNoZCxVQUFNLGdCQUFnQiw4QkFBOEIsS0FBSyxTQUFTLGdCQUFnQjtBQUVsRixRQUFJLGFBQWEsUUFBUSxjQUFjLFFBQVEsY0FBYyxRQUFRLGNBQWMsTUFBSztBQUN2RixjQUFRLFlBQVk7QUFDcEIsWUFBTSxZQUFZO0FBQ2xCLGVBQVMsYUFBYSxJQUFJO0FBQzFCLGFBQU8sYUFBYTtBQUNwQixlQUFTLGFBQWEsSUFBRztBQUN6QixhQUFPLGFBQWEsS0FBSTtBQUN4QixlQUFTLGFBQWEsSUFBSTtBQUMxQixhQUFPLGFBQWE7QUFHcEIsWUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsaUJBQWlCLEdBQUcsTUFBTSxNQUFNLEdBQUcsQ0FBQztBQUNoRixZQUFNLFlBQVksQ0FBQyxHQUFHLFNBQVMsTUFBTSxHQUFHLE1BQU0sR0FBRyxnQkFBZ0IsR0FBRyxTQUFTLE1BQU0sSUFBSSxDQUFDO0FBQ3hGLFlBQU0sWUFBWSxDQUFDLEdBQUcsVUFBVSxNQUFNLEdBQUcsTUFBTSxHQUFHLGlCQUFpQixHQUFHLFVBQVUsTUFBTSxJQUFJLENBQUM7QUFDM0YsWUFBTSxZQUFZLENBQUMsR0FBRyxVQUFVLE1BQU0sR0FBRyxNQUFNLEdBQUcsZUFBZSxHQUFHLFVBQVUsTUFBTSxJQUFJLENBQUM7QUFDekYsWUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFVBQVUsS0FBSyxJQUFJLENBQUM7QUFBQSxJQUNsRDtBQUNBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFHQSxNQUFNLG1CQUFtQixnQkFBd0IsT0FBYTtBQUM3RCxVQUFNLGVBQWUsSUFBSSxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQjtBQUMzRSxRQUFJLGdCQUFnQixNQUFNO0FBQ3pCLGNBQVEsSUFBSSxRQUFRLGtDQUFrQztBQUN0RDtBQUFBLElBQ0Q7QUFDQSxVQUFNLE9BQU87QUFFYixVQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQ3pDLFFBQUksWUFBMkI7QUFDL0IsUUFBSSxhQUE0QjtBQUNoQyxRQUFJLE1BQXFCO0FBQ3pCLFFBQUksUUFBdUI7QUFDM0IsUUFBSSxPQUFzQjtBQUMxQixRQUFJLFNBQXdCO0FBRTVCLFVBQU0sUUFBUSxRQUFRLE1BQU0sSUFBSTtBQUNoQyxhQUFTQSxLQUFJLEdBQUdBLEtBQUksTUFBTSxRQUFRQSxNQUFLO0FBQ3RDLFlBQU0sT0FBTyxNQUFNQSxFQUFDLEVBQUUsS0FBSztBQUMzQixVQUFJLFNBQVMsaUJBQWlCO0FBQzdCLFlBQUksY0FBYyxNQUFNO0FBQ3ZCLHNCQUFZQTtBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQ0EsVUFBSSxTQUFTLE1BQU0sUUFBUSxRQUFRLE1BQU0sT0FBTyxLQUFJO0FBQ25ELFlBQUksZUFBZSxNQUFNO0FBQ3hCLHVCQUFhQTtBQUFBLFFBQ2Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUNBLFFBQUksYUFBYSxRQUFRLGNBQWMsTUFBSztBQUMzQyxZQUFNLFlBQVk7QUFDbEIsY0FBUSxZQUFZO0FBRXBCLGFBQU8sYUFBYTtBQUNwQixlQUFTLGFBQWE7QUFFdEIsWUFBTSxjQUFjLE9BQU8sTUFBTSxPQUFPLFFBQVEsTUFBTSxRQUFRLFNBQVMsTUFBTSxjQUFjLFNBQVMsT0FBTyxPQUFPLEVBQUUsT0FBTyxRQUFRLElBQUk7QUFDdkksWUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsYUFBYSxHQUFHLE1BQU0sTUFBTSxHQUFHLENBQUM7QUFDNUUsWUFBTSxZQUFZLENBQUMsR0FBRyxTQUFTLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxTQUFTLE1BQU0sSUFBSSxDQUFDO0FBQ3hFLFlBQU0sSUFBSSxNQUFNLE9BQU8sTUFBTSxVQUFVLEtBQUssSUFBSSxDQUFDO0FBQ2pELGNBQVEsSUFBSSxnQkFBZ0IsYUFBYTtBQUFBLElBQzFDO0FBQUEsRUFDRDtBQUFBLEVBRUEsTUFBTSx1QkFBdUIsZ0JBQXdCLE9BQWE7QUFDakUsVUFBTSxlQUFlLElBQUksTUFBTSxzQkFBc0IsR0FBRyxtQkFBbUI7QUFDM0UsUUFBSSxnQkFBZ0IsTUFBTTtBQUN6QixjQUFRLElBQUksUUFBUSxrQ0FBa0M7QUFDdEQ7QUFBQSxJQUNEO0FBQ0EsVUFBTSxPQUFPO0FBRWIsVUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QyxRQUFJLFlBQTJCO0FBQy9CLFFBQUksTUFBcUI7QUFDekIsUUFBSSxRQUF1QjtBQUUzQixVQUFNLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDaEMsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLE1BQU0sUUFBUUEsTUFBSztBQUN0QyxZQUFNLE9BQU8sTUFBTUEsRUFBQyxFQUFFLEtBQUs7QUFDM0IsVUFBSSxTQUFTLGlCQUFpQjtBQUM3QixZQUFJLGNBQWMsTUFBTTtBQUN2QixzQkFBWUE7QUFBQSxRQUNiO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFDQSxRQUFJLGFBQWEsTUFBTTtBQUN0QixZQUFNLFlBQVk7QUFDbEIsY0FBUSxZQUFZO0FBRXBCLFlBQU0sY0FBYyxPQUFPLE1BQU0sT0FBTyxXQUFXLE1BQU0sY0FBYyxTQUFTLE9BQU8sT0FBTyxFQUFFLE9BQU8sUUFBUSxJQUFJO0FBQ25ILFlBQU0sV0FBVyxDQUFDLEdBQUcsTUFBTSxNQUFNLEdBQUcsS0FBSyxHQUFHLGFBQWEsR0FBRyxNQUFNLE1BQU0sR0FBRyxDQUFDO0FBQzVFLFlBQU0sSUFBSSxNQUFNLE9BQU8sTUFBTSxTQUFTLEtBQUssSUFBSSxDQUFDO0FBQ2hELGNBQVEsSUFBSSxnQkFBZ0IsYUFBYTtBQUFBLElBQzFDO0FBQUEsRUFDRDtBQUFBLEVBRUEsTUFBTSxnQ0FBZ0MsZ0JBQXdCLE9BQWM7QUFDM0UsVUFBTSxlQUFlLElBQUksTUFBTSxzQkFBc0IsR0FBRyxtQkFBbUI7QUFDM0UsUUFBSSxnQkFBZ0IsTUFBTTtBQUN6QixjQUFRLElBQUksUUFBUSxrQ0FBa0M7QUFDdEQ7QUFBQSxJQUNEO0FBQ0EsVUFBTSxPQUFPO0FBRWIsVUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QyxRQUFJLFlBQTJCO0FBQy9CLFFBQUksYUFBNEI7QUFFaEMsVUFBTSxRQUFRLFFBQVEsTUFBTSxJQUFJO0FBQ2hDLGFBQVNBLEtBQUksR0FBR0EsS0FBSSxNQUFNLFFBQVFBLE1BQUs7QUFDdEMsWUFBTSxPQUFPLE1BQU1BLEVBQUMsRUFBRSxLQUFLO0FBQzNCLFVBQUksU0FBUyxvQkFBb0I7QUFDaEMsWUFBSSxjQUFjLE1BQU07QUFDdkIsc0JBQVlBO0FBQUEsUUFDYjtBQUFBLE1BQ0Q7QUFDQSxVQUFJLGFBQWEsUUFBUSxjQUFjLE1BQUs7QUFFM0MsY0FBTSxhQUFhO0FBRW5CLGNBQU1DLFNBQVEsS0FBSyxNQUFNLFVBQVU7QUFFbkMsWUFBR0EsUUFBTTtBQUNSLGdCQUFNLGNBQWMsU0FBU0EsT0FBTSxDQUFDLEdBQUcsRUFBRTtBQUN6QyxjQUFJLGNBQWMsT0FBTztBQUN4Qix5QkFBYUQ7QUFBQSxVQUNkO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQ0EsUUFBSSxhQUFhLFFBQVEsY0FBYyxNQUFLO0FBQzNDLFlBQU0sV0FBVyxDQUFDLEdBQUcsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEdBQUcsR0FBRyxNQUFNLE1BQU0sVUFBVSxDQUFDO0FBQzlFLFlBQU0sSUFBSSxNQUFNLE9BQU8sTUFBTSxTQUFTLEtBQUssSUFBSSxDQUFDO0FBQUEsSUFDakQ7QUFBQSxFQUNEO0FBQUEsRUFHQSxNQUFNLFlBQVksT0FBOEI7QUFDL0MsVUFBTSxRQUFRLE1BQU0saUJBQWlCO0FBQ3JDLFVBQU0sZUFBZSx5QkFBeUIsS0FBSztBQUduRCxVQUFNLGVBQWUsYUFBYSxLQUFLO0FBR3ZDLFFBQUksZUFBZTtBQUNuQixRQUFJLFlBQVksSUFBSSxLQUFLLFlBQVk7QUFFckMsVUFBTSxzQkFBc0Isb0JBQUksSUFBb0I7QUFDcEQsVUFBTSxhQUFhLGNBQWMsSUFBSSxLQUFLLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNuRSxRQUFJLGFBQWEsVUFBVSxTQUFTLElBQUUsSUFBSSxNQUFNLFVBQVUsWUFBWTtBQUN0RSxRQUFJLFNBQVM7QUFVYixtQkFBZTtBQUNmLGdCQUFZLElBQUksS0FBSyxZQUFZO0FBQ2pDLGlCQUFhLFVBQVUsU0FBUyxJQUFFLElBQUksTUFBTSxVQUFVLFlBQVk7QUFFbEUsV0FBTyxlQUFlLFlBQVc7QUFDaEMsbUJBQWEsVUFBVSxTQUFTLElBQUUsSUFBSSxNQUFNLFVBQVUsWUFBWTtBQUVsRSxlQUFTLFNBQVMsYUFBYTtBQUMvQixnQkFBVSxTQUFTLFVBQVUsU0FBUyxJQUFJLENBQUM7QUFDM0Msc0JBQWdCO0FBQ2hCLDBCQUFvQixJQUFJLFlBQVksQ0FBQztBQUFBLElBQ3RDO0FBQ0EsYUFBUyxPQUFPLE1BQU0sR0FBRSxPQUFPLFNBQU8sQ0FBQztBQWtCdkMsVUFBTSxvQkFBb0IscUJBQXFCLEtBQUs7QUFDcEQsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLGtCQUFrQixRQUFRQSxNQUFJO0FBRWpELFlBQU0sZ0JBQWdCLE9BQU8sa0JBQWtCQSxFQUFDLEdBQUcsUUFBUTtBQUMzRCxZQUFNLGVBQWUsb0JBQW9CLElBQUksYUFBYTtBQUUxRCxVQUFJLGlCQUFpQixRQUFXO0FBQy9CLDRCQUFvQixJQUFJLGVBQWUsZUFBZSxDQUFDO0FBQUEsTUFDeEQsT0FBTztBQUVOLDRCQUFvQixJQUFJLGVBQWUsQ0FBQztBQUFBLE1BQ3pDO0FBQUEsSUFDRDtBQVVBLFFBQUkscUJBQXFCO0FBQ3pCLGVBQVcsQ0FBQyxLQUFLLEtBQUsscUJBQXFCO0FBRTFDLDJCQUFxQixxQkFBcUIsUUFBUTtBQUFBLElBQ25EO0FBQ0EseUJBQXFCLG1CQUFtQixNQUFNLEdBQUUsbUJBQW1CLFNBQU8sQ0FBQztBQUUzRSxXQUFPLGtCQUFrQixRQUFRLG9CQUFvQixLQUFLLFNBQVMsc0JBQXNCO0FBQUEsRUFDMUY7QUFBQSxFQUVBLE1BQU0sZ0JBQWdCLFVBQTJCO0FBQ2hELGFBQVMsS0FBSyxDQUFDLFdBQW1CO0FBQ2pDLFVBQUcsUUFBTztBQUNULGNBQU0sUUFBZ0IsaUJBQWlCLEtBQUssU0FBUyxhQUFhLEtBQUs7QUFDdkUsWUFBSSx3QkFBTyxzQkFBc0IsTUFBTSxnQkFBZ0IsTUFBTSxhQUFhO0FBQzFFLGdCQUFRLElBQUksc0JBQXNCLE1BQU0sZ0JBQWdCLE1BQU0sYUFBYTtBQUUzRSxhQUFLLG1CQUFtQixLQUFLLFNBQVMsZ0JBQWdCLEtBQUs7QUFDM0QsYUFBSyxTQUFTLG9CQUFvQjtBQUNsQyxhQUFLLFNBQVMscUJBQXFCO0FBQ25DLGFBQUssU0FBUyxLQUFLLFFBQVE7QUFBQSxNQUM1QjtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFBQSxFQUdBLE1BQU0sNEJBQTRCO0FBRWpDLFVBQU0sRUFBRSxNQUFNLElBQUksS0FBSztBQUt2QixVQUFNLGVBQWUsTUFBTSxnQkFBZ0IsS0FBSyxLQUFLLEtBQUssU0FBUyxhQUFhLEtBQUssU0FBUyxhQUFhO0FBQzNHLGVBQVcsWUFBWSxhQUFhLEtBQUssR0FBRztBQUMzQyxZQUFNLFFBQVEsTUFBTSxTQUFTO0FBQzdCLFlBQU0sT0FBTyxNQUFNLEtBQUssQ0FBQUUsVUFBUUEsTUFBSyxhQUFhLFFBQVE7QUFDMUQsVUFBSSxDQUFDLE1BQU07QUFDVixnQkFBUSxLQUFLLFFBQVEscUJBQXFCO0FBQzFDO0FBQUEsTUFDRDtBQUVBLGNBQVEsSUFBSSxtQkFBbUIsVUFBVTtBQUN6QyxVQUFJO0FBQ0gsY0FBTSxLQUFLLElBQUksWUFBWSxtQkFBbUIsTUFBTSxDQUFDLGdCQUFnQjtBQUNwRSxpQkFBTyxZQUFZLGFBQWE7QUFDaEMsaUJBQU8sWUFBWSxtQkFBbUI7QUFDdEMsaUJBQU8sWUFBWSxjQUFjO0FBQ2pDLGlCQUFPLFlBQVksZUFBZTtBQUNsQyxpQkFBTyxZQUFZLG9DQUFvQztBQUN2RCxpQkFBTyxZQUFZLGVBQWU7QUFBQSxRQUNuQyxDQUFDO0FBQUEsTUFDRixTQUFTSCxJQUFQO0FBQ0QsYUFBSUEsTUFBQSxnQkFBQUEsR0FBRyxVQUFTLGtCQUFrQjtBQUNqQyxnQkFBTSxlQUFlLGlEQUFpREEsR0FBRTtBQUN4RSxjQUFJLHdCQUFPLGNBQWMsR0FBSTtBQUM3QixrQkFBUSxNQUFNLFlBQVk7QUFBQSxRQUMzQjtBQUFBLE1BQ0Q7QUFBQSxJQUVEO0FBQUEsRUFDRDtBQUFBLEVBRUEsTUFBTSxvQkFBb0IsY0FBc0M7QUFDL0QsUUFBSSxpQkFBaUI7QUFDckIsYUFBU0MsS0FBSSxjQUFjQSxLQUFJLEtBQUtBLE1BQUk7QUFDdkMsWUFBTSxRQUFnQixpQkFBaUJBLElBQUcsSUFBSTtBQUU5QyxZQUFNLGFBQWE7QUFFbkIsWUFBTUMsU0FBUSxNQUFNLE1BQU0sTUFBTSxVQUFVO0FBQzFDLFVBQUdBLFFBQU07QUFDUixjQUFNLGNBQWMsU0FBU0EsT0FBTSxDQUFDLEdBQUcsRUFBRTtBQUN6QyxZQUFJLGNBQWMsZ0JBQWdCLGtCQUFrQixHQUFJO0FBQ3ZELDJCQUFpQjtBQUFBLFFBQ2xCO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsTUFBTSxpQkFBa0M7QUFDdkMsVUFBTSxjQUFjLE1BQU0sS0FBSyxvQkFBb0IsS0FBSyxTQUFTLFdBQVc7QUFDNUUsVUFBTSxzQkFBc0IscUJBQXFCLFdBQVc7QUFJNUQsVUFBTSxnQkFBZ0IsS0FBSyxPQUFPLHNCQUFzQixLQUFLLFNBQVMsZ0JBQWMsS0FBRyxHQUFHO0FBQzFGLFNBQUssU0FBUyxxQkFBcUI7QUFDbkMsU0FBSyxTQUFTLG9CQUFvQjtBQUNsQyxVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFFakMsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVBLE1BQU0saUJBQWlCO0FBemhDeEI7QUEwaENFLFVBQU0sZUFBZSxJQUFJLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxTQUFTLG1CQUFtQjtBQUN6RixRQUFJLGNBQWE7QUFDaEIsWUFBTSxlQUFhLFVBQUssSUFBSSxVQUFVLGNBQWMsTUFBakMsbUJBQW9DLFNBQVE7QUFDL0QsWUFBTSxJQUFJLFVBQVUsYUFBYSxhQUFhLE1BQU0sVUFBVTtBQUFBLElBQy9ELE9BQU87QUFDTixjQUFRLElBQUksbUNBQW1DO0FBQUEsSUFDaEQ7QUFBQSxFQUNEO0FBRUQ7QUFHQSxTQUFTLFVBQVUsV0FBNEI7QUFDOUMsUUFBTSxjQUFjLE9BQU8sT0FBTztBQUNsQyxTQUFPLFlBQVksT0FBTyxXQUFXLEtBQUs7QUFDM0M7QUFFQSxTQUFTLGVBQWUsV0FBNEI7QUFDbkQsUUFBTSxzQkFBc0IsT0FBTyxPQUFPLEVBQUUsU0FBUyxHQUFHLEtBQUs7QUFDN0QsU0FBTyxVQUFVLE9BQU8scUJBQXFCLEtBQUs7QUFDbkQ7QUFLQSxlQUFlLGlCQUFpQkUsTUFBVSxVQUFpQztBQU0xRSxRQUFNLGVBQWVBLEtBQUksTUFBTSxzQkFBc0IsR0FBRyxhQUFhO0FBQ3JFLE1BQUksd0JBQXdCLHdCQUFPO0FBQ2xDLFlBQVEsSUFBSSxRQUFRLDRCQUE0QjtBQUNoRDtBQUFBLEVBQ0Q7QUFFQSxRQUFNQSxLQUFJLE1BQU0sT0FBTyxHQUFHLGVBQWUsaUJBQWlCO0FBRTNEO0FBR0EsSUFBTSxzQkFBTixjQUFrQyx1QkFBTTtBQUFBO0FBQUEsRUFHdkMsWUFBWUEsTUFBVSxhQUFxQjtBQUMxQyxVQUFNQSxJQUFHO0FBQ1QsU0FBSyxjQUFjO0FBQUEsRUFDcEI7QUFBQSxFQUVBLFNBQVM7QUFDUixVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsUUFBUSxLQUFLLFdBQVc7QUFBQSxFQUNuQztBQUFBLEVBRUEsVUFBVTtBQUNULFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQUEsRUFDakI7QUFDRDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K diff --git a/src/main.ts b/src/main.ts index 86bc5fb..1403e27 100644 --- a/src/main.ts +++ b/src/main.ts @@ -640,11 +640,11 @@ export default class gamification extends Plugin { } async increaseStreakbooster(increaseValue:number){ - let newValue = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); - if(newValue > 80){ - newValue = 80; + let newBoosterFakfor = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); + if(newBoosterFakfor > 80){ + newBoosterFakfor = 80; } - this.settings.streakbooster = newValue; + this.settings.streakbooster = newBoosterFakfor; this.settings.streakboosterDate = true; await this.saveData(this.settings) console.log(`streakbooster: ${this.settings.streakbooster}`) @@ -652,12 +652,12 @@ export default class gamification extends Plugin { async decreaseStreakbooster(decreaseValue:number){ - let newValue = parseFloat((this.settings.streakbooster - decreaseValue).toFixed(1)) - this.settings.streakbooster = newValue - if (newValue < 0){ - newValue = 0 + let newBoosterFakfor = parseFloat((this.settings.streakbooster - decreaseValue).toFixed(1)) + this.settings.streakbooster = newBoosterFakfor + if (newBoosterFakfor < 0){ + newBoosterFakfor = 0 } - this.settings.streakbooster = newValue + this.settings.streakbooster = newBoosterFakfor this.settings.streakboosterDate = false; await this.saveData(this.settings) } From 40030f111ae8d85568c83ea339727c2ea1879966 Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Fri, 6 Oct 2023 18:18:19 +0200 Subject: [PATCH 13/15] react on how many days no note creation --- main.js | 7 +++++-- src/main.ts | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/main.js b/main.js index 4f57dad..4e8057b 100644 --- a/main.js +++ b/main.js @@ -2966,9 +2966,12 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` reset = true; } if (!isOneDayBefore(window.moment(this.settings.weeklyNoteCreationDate, "DD.MM.YYYY")) && !isSameDay(window.moment(this.settings.weeklyNoteCreationDate, "DD.MM.YYYY"))) { + const currentDate = window.moment(); + const daysPassed = currentDate.diff(window.moment(this.settings.weeklyNoteCreationDate, "DD.MM.YYYY"), "days") - 1; this.settings.weeklyNoteCreationTask = 0; this.settings.weeklyNoteCreationDate = window.moment().subtract(1, "day").format("DD.MM.YYYY"); - this.decreaseStreakbooster(1); + this.decreaseStreakbooster(daysPassed); + console.log(`${daysPassed} days passed`); await this.saveSettings(); await this.updateStatusBar(this.statusbarGamification); console.log(`weekly Challenge reseted`); @@ -3464,4 +3467,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKDEpXHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIGNyZWF0ZWQuYClcclxuXHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBOb3RlcyBjcmVhdGVkIHRvZGF5LmApXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAxO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGlmIChjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzIDwgNykge1xyXG5cdFx0XHRjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcikge1xyXG5cdFx0aWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPD0gNikge1xyXG5cdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fSBlbHNlIGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpIHtcclxuXHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMSk7XHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSlcclxuXHRcdFx0Y29uc29sZS5sb2coYFdlZWtseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwO1xyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9fFx1RDgzRFx1REU4MCR7Ym9vc3RlckZhY3Rvcn0ke3RoaXMucmF0ZUJvb3N0ZXJEaXJlY3Rpb24oKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnXHJcblx0XHQvKmNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0XHRpZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwNlx1RkUwRidcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnXHJcblx0XHR9Ki9cclxuXHRcdGlmKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUpe1xyXG5cdFx0XHRkaXJlY3Rpb24gPSAnXHUyQjA2XHVGRTBGJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRpcmVjdGlvblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld0Jvb3N0ZXJGYWtmb3IgPSBwYXJzZUZsb2F0KCh0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyBpbmNyZWFzZVZhbHVlKS50b0ZpeGVkKDEpKTtcclxuXHRcdGlmKG5ld0Jvb3N0ZXJGYWtmb3IgPiA4MCl7XHJcblx0XHRcdG5ld0Jvb3N0ZXJGYWtmb3IgPSA4MDtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld0Jvb3N0ZXJGYWtmb3I7XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gdHJ1ZTtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdGNvbnNvbGUubG9nKGBzdHJlYWtib29zdGVyOiAke3RoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3Rlcn1gKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGRlY3JlYXNlU3RyZWFrYm9vc3RlcihkZWNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHRsZXQgbmV3Qm9vc3RlckZha2ZvciA9IHBhcnNlRmxvYXQoKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtIGRlY3JlYXNlVmFsdWUpLnRvRml4ZWQoMSkpXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdCb29zdGVyRmFrZm9yXHJcblx0XHRpZiAobmV3Qm9vc3RlckZha2ZvciA8IDApe1xyXG5cdFx0XHRuZXdCb29zdGVyRmFrZm9yID0gMFxyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3Qm9vc3RlckZha2ZvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IGZhbHNlO1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQ3JCO0FBOEJPLElBQU0sNkJBQU4sY0FBeUMsaUNBQWlCO0FBQUEsRUE0QmhFLFlBQVlDLE1BQVUsUUFBc0I7QUFDMUMsVUFBTUEsTUFBSyxNQUFNO0FBQ2pCLFNBQUssU0FBUztBQUFBLEVBQ2hCO0FBQUEsRUFFTyxVQUFnQjtBQUN0QixVQUFNLEVBQUUsWUFBWSxJQUFJO0FBQ3hCLGdCQUFZLFNBQVMscUJBQXFCO0FBQzFDLFNBQUssWUFBWSxNQUFNO0FBRXZCLFVBQU0sWUFBWSxZQUFZLFVBQVUsUUFB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QUFJLENBQUMsU0FBUztBQUNaLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxRQUFRLENBQUMsRUFBRSxRQUFRLG1CQUFtQixHQUFHO0FBQ2xEOzs7QUNqWk8sSUFBTSxxQkFBcUI7QUFDM0IsSUFBTSxpQkFBaUI7QUFDdkIsSUFBTSwwQkFBMEI7QUFDaEMsSUFBTSwyQkFBMkI7QUFDakMsSUFBTSxvQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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RUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxR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RUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUdPLFNBQVMsZ0NBQWdDLFFBQXdCO0FBQ3ZFLFFBQU0sY0FBYyxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksd0JBQXdCLE1BQU07QUFDN0UsUUFBTSxVQUFVLHdCQUF3QixXQUFXO0FBQ25ELFNBQU8sUUFBUSxRQUFRLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDaEQ7QUFHTyxTQUFTLGlDQUFpQyxRQUF3QjtBQUN4RSxRQUFNLGNBQWMsS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLGdCQUFnQixNQUFNO0FBQ3JFLFFBQU0sVUFBVSxnQkFBZ0IsV0FBVztBQUMzQyxTQUFPLFFBQVEsUUFBUSxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ2hEO0FBR08sU0FBUyx1QkFBdUIsUUFBd0I7QUFDOUQsUUFBTSxjQUFjLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSxtQkFBbUIsTUFBTTtBQUN4RSxRQUFNLFVBQVUsbUJBQW1CLFdBQVc7QUFDOUMsU0FBTyxRQUFRLFFBQVEsT0FBTyxPQUFPLFNBQVMsQ0FBQztBQUNoRDs7O0EzQ2xKQSxJQUFxQixlQUFyQixjQUEwQyx3QkFBTztBQUFBLEVBQWpEO0FBQUE7QUFJQyxTQUFRLGdCQUFnQixLQUFLLGlCQUFpQjtBQUM5QyxTQUFRLHdCQUF3QixLQUFLLGNBQWMsU0FBUyxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUM7QUFBQTtBQUFBLEVBRWhGLE1BQU0sU0FBUztBQUNkLFlBQVEsSUFBSSxtQ0FBbUM7QUFFL0MsVUFBTSxLQUFLLGFBQWE7QUFFeEIsU0FBSyxjQUFjLElBQUksMkJBQTJCLEtBQUssS0FBSyxJQUFJLENBQUM7QUFHakUsZUFBVyxZQUFZO0FBRXRCLFlBQU0sS0FBSyxnQkFBZ0I7QUFBQSxJQUM1QixHQUFHLEdBQUk7QUFJUCxTQUFLLGdCQUFnQixLQUFLLEtBQUs7QUFDL0IsU0FBSyxVQUFVLE9BQU8sWUFBWSxLQUFLLGdCQUFnQixLQUFLLElBQUksR0FBRyxLQUFLLGFBQWE7QUFFckYsVUFBTSxLQUFLLGdCQUFnQixLQUFLLHFCQUFxQjtBQUdyRCxRQUFJLEtBQUssU0FBUyxPQUFNO0FBQ3ZCLFdBQUssY0FBYyxpQkFBaUIsMEJBQTBCLFlBQVk7QUEwQnpFLGNBQU0sS0FBSyxhQUFhO0FBQ3hCLGNBQU0sS0FBSyxpQkFBaUIsS0FBSyxTQUFTLGNBQWM7QUFHeEQsY0FBTSxLQUFLLGdCQUFnQjtBQUFBLE1BRzVCLENBQUM7QUFBQSxJQUNGO0FBR0EsU0FBSyxjQUFjLFVBQVUsMkJBQTJCLFlBQVk7QUFFbkUsWUFBTSxLQUFLLHNCQUFzQjtBQUFBLElBQ2xDLENBQUM7QUFHRCxRQUFJLEtBQUssU0FBUyxtQkFBa0I7QUFFbkMsV0FBSyxXQUFXO0FBQUEsUUFDZixJQUFJO0FBQUEsUUFDSixNQUFNO0FBQUEsUUFDTixVQUFVLFlBQVk7QUFDckIsZ0JBQU0sS0FBSyxlQUFlLEtBQUsscUJBQXFCO0FBQUEsUUFDckQ7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGO0FBRUEsUUFBSSxLQUFLLFNBQVMsbUJBQWtCO0FBRW5DLFdBQUssV0FBVztBQUFBLFFBQ2YsSUFBSTtBQUFBLFFBQ0osTUFBTTtBQUFBLFFBQ04sVUFBVSxZQUFZO0FBQ3JCLGdCQUFNLEVBQUUsTUFBTSxJQUFJLEtBQUs7QUFDdkIsZ0JBQU0saUJBQWlCLEtBQUssS0FBSyxLQUFLLFNBQVMsY0FBYztBQUM3RCxnQkFBTSxjQUFjLE1BQU0sS0FBSyxZQUFZLEtBQUs7QUFDaEQsZ0JBQU0sb0JBQW9CLEtBQUssU0FBUyxnQkFBZ0IsV0FBVztBQUFBLFFBQ3BFO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUdBLFFBQUksS0FBSyxTQUFTLG1CQUFtQjtBQUVwQyxXQUFLLFdBQVc7QUFBQSxRQUNmLElBQUk7QUFBQSxRQUNKLE1BQU07QUFBQSxRQUNOLFVBQVUsWUFBWTtBQUNOLGdCQUFNLEtBQUssVUFBVTtBQUFBLFFBQ3pCO0FBQUEsTUFFYixDQUFDO0FBQUEsSUFDRjtBQUdBLFNBQUssV0FBVztBQUFBLE1BQ2YsSUFBSTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sVUFBVSxZQUFZO0FBQ3JCLGNBQU0sRUFBRSxNQUFNLElBQUk7QUFDbEIsY0FBTSxjQUFjLE1BQU0sS0FBSyxZQUFZLEtBQUs7QUFDaEQsY0FBTSxvQkFBb0IsS0FBSyxTQUFTLGdCQUFnQixXQUFXO0FBQUEsTUFDcEU7QUFBQSxJQUNELENBQUM7QUFJRCxTQUFLLFdBQVc7QUFBQSxNQUNmLElBQUk7QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFVBQVUsWUFBWTtBQUNyQixjQUFNLEtBQUssc0JBQXNCO0FBQUEsTUFDbEM7QUFBQSxJQUNELENBQUM7QUFJRCxTQUFLLFdBQVc7QUFBQSxNQUNmLElBQUk7QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFVBQVUsWUFBWTtBQUNyQixjQUFNLHFCQUFxQixLQUFLLFNBQVMsc0JBQXNCLEtBQUssU0FBUyxvQkFBb0I7QUFBQSxNQUNsRztBQUFBLElBQ0QsQ0FBQztBQUFBLEVBRUY7QUFBQSxFQUdHLE1BQWMsWUFBWTtBQUN0QixVQUFNLEtBQUssMEJBQTBCO0FBQ3JDLFNBQUssU0FBUyxjQUFjO0FBQzVCLFNBQUssU0FBUyxlQUFlO0FBQzdCLFNBQUssU0FBUyxpQkFBaUI7QUFDL0IsU0FBSyxTQUFTLG9CQUFvQjtBQUNsQyxTQUFLLFNBQVMscUJBQXFCO0FBQ25DLFVBQU0sS0FBSyxTQUFTLEtBQUssUUFBUTtBQUNqQyxVQUFNLEtBQUssaUJBQWlCLENBQUM7QUFDN0IsVUFBTSxLQUFLLGdCQUFnQixLQUFLLHFCQUFxQjtBQUNyRCxRQUFJLG9CQUFvQixLQUFLLEtBQUsseURBQXlELEtBQUssU0FBUyw4QkFBOEIsRUFBRSxLQUFLO0FBQUEsRUFDbEo7QUFBQSxFQUVBLE1BQWMsZUFBZSx1QkFBd0M7QUFDdkUsU0FBSyxTQUFTLHdCQUF3QixPQUFPLElBQUksS0FBSyxHQUFHLFlBQVk7QUFDckUsVUFBTSxLQUFLLGFBQWE7QUFFeEIsVUFBTSxFQUFDLE1BQUssSUFBSSxLQUFLO0FBQ3JCLFVBQU0saUJBQWlCLEtBQUssS0FBSyxLQUFLLFNBQVMsY0FBYztBQUM3RCxVQUFNLGNBQWMsTUFBTSxLQUFLLFlBQVksS0FBSztBQUNoRCxVQUFNLG9CQUFvQixLQUFLLFNBQVMsZ0JBQWdCLFdBQVc7QUFDbkUsVUFBTSxLQUFLLGVBQWU7QUFDMUIsVUFBTSxlQUF3QixNQUFNLFdBQVcsS0FBSyxLQUFLLEtBQUssU0FBUyxhQUFhLEtBQUssU0FBUyxhQUFhO0FBQy9HLFlBQVEsSUFBSSx5Q0FBeUMsYUFBYSxRQUFRO0FBRTFFLFFBQUksaUJBQWlCO0FBRXJCLGVBQVcsWUFBWSxjQUFjO0FBQ3BDLFlBQU0sT0FBTztBQUNiLFlBQU0sZUFBZSxNQUFNLElBQUksTUFBTSxLQUFLLElBQUk7QUFDOUMsWUFBTSxhQUFhLEtBQUssSUFBSSxVQUFVLG9CQUFvQiw2QkFBWTtBQUN0RSxVQUFJLGNBQWMsV0FBVyxRQUFRLFdBQVcsS0FBSyxTQUFTLEtBQUssTUFBTTtBQUN4RSxnQkFBUSxLQUFLLFFBQVEsS0FBSyxtQ0FBbUM7QUFDN0Q7QUFBQSxNQUNEO0FBRUEsWUFBTSxhQUFhLDRCQUE0QixjQUFjLFNBQVMsUUFBUTtBQUM5RSxZQUFNLGlCQUFpQixlQUFlLFVBQVU7QUFDaEQsWUFBTTtBQUFBLFFBQ0w7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0QsSUFBSSwrQkFBK0IsY0FBYyxTQUFTLFVBQVUsS0FBSyxTQUFTLHNCQUFzQixLQUFLLFNBQVMsb0JBQW9CO0FBQzFJLFlBQU0scUJBQTZCLDZCQUE2QixXQUFXLGtCQUFrQixTQUFTO0FBQ3RHLFlBQU0sZUFBZSxtQkFBbUIsS0FBSyxJQUFJO0FBQ2pELFlBQU0sZUFBZSxjQUFjLElBQUk7QUFDdkMsWUFBTSxjQUFjLFlBQVksWUFBWTtBQUM1QyxZQUFNLFVBQVUsYUFBYSxvQkFBb0IsSUFBSSxDQUFDO0FBQ3RELFlBQU0sZUFBZSxvQkFBb0IsZ0JBQWdCLGNBQWMsYUFBYSxTQUFTLGtCQUFrQjtBQUcvRyxjQUFRLElBQUksbUJBQW1CLFNBQVMsb0JBQW9CLFNBQVMsTUFBTTtBQUUzRSxVQUFJO0FBQ0gsY0FBTSxLQUFLLElBQUksWUFBWSxtQkFBbUIsTUFBTSxDQUFDLGdCQUFnQjtBQUNwRSxjQUFJLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxZQUFZLEtBQUssR0FBRztBQUNsRiw4QkFBa0IscUJBQXFCLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxZQUFZO0FBQzlHLGlCQUFLLGlCQUFpQixxQkFBcUIsNkJBQTZCLGdDQUFnQyxZQUFZLENBQUM7QUFBQSxVQUN0SCxXQUFXLEVBQUUsbUJBQW1CLGNBQWM7QUFDN0MsOEJBQWtCLHFCQUFxQiw2QkFBNkIsS0FBSyxZQUFZO0FBQ3JGLGlCQUFLLGlCQUFpQixxQkFBcUIsNkJBQTZCLEtBQUssWUFBWSxDQUFDO0FBQUEsVUFDM0Y7QUFFQSxjQUFJLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZLEtBQUssS0FBSyxpQkFBaUIsYUFBYTtBQUNoSCw4QkFBa0IsaUJBQWlCLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZO0FBQ3hHLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksYUFBYSxHQUFHLFlBQVksQ0FBQztBQUFBLFVBQzlHLFdBQVcsRUFBRSxpQkFBaUIsY0FBYztBQUMzQyw4QkFBa0IsaUJBQWlCLDZCQUE2QixLQUFLLFlBQVk7QUFDakYsaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxZQUFZLENBQUM7QUFBQSxVQUN2RjtBQUVBLGNBQUksNkJBQTZCLFlBQVksbUJBQW1CLEdBQUcsY0FBYyxLQUFLLEdBQUc7QUFDeEYsOEJBQWtCLGlCQUFpQiw2QkFBNkIsWUFBWSxtQkFBbUIsR0FBRyxjQUFjO0FBQ2hILGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksbUJBQW1CLEdBQUcsY0FBYyxDQUFDO0FBQUEsVUFDdEgsV0FBVyxFQUFFLHVCQUF1QixjQUFjO0FBQ2pELDhCQUFrQixpQkFBaUIsNkJBQTZCLEtBQUssY0FBYztBQUNuRixpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixLQUFLLGNBQWMsQ0FBQztBQUFBLFVBQ3pGO0FBRUEsY0FBSSw2QkFBNkIsWUFBWSxjQUFjLEdBQUcsV0FBVyxLQUFLLEdBQUc7QUFDaEYsOEJBQWtCLGlCQUFpQiw2QkFBNkIsWUFBWSxjQUFjLEdBQUcsV0FBVztBQUN4RyxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGNBQWMsR0FBRyxXQUFXLENBQUM7QUFBQSxVQUM5RyxXQUFXLEVBQUUsa0JBQWtCLGNBQWM7QUFDNUMsOEJBQWtCLGlCQUFpQiw2QkFBNkIsS0FBSyxXQUFXO0FBQ2hGLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssV0FBVyxDQUFDO0FBQUEsVUFDdEY7QUFFQSxjQUFJLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPLEtBQUssR0FBRztBQUM3RSw4QkFBa0IsaUJBQWlCLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPO0FBQ3JHLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUFBLFVBQzNHLFdBQVcsRUFBRSxtQkFBbUIsY0FBYztBQUM3Qyw4QkFBa0IsaUJBQWlCLDZCQUE2QixLQUFLLE9BQU87QUFDNUUsaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxPQUFPLENBQUM7QUFBQSxVQUNsRjtBQUVBLGNBQUksNkJBQTZCLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCLEtBQUssR0FBRztBQUM3Ryw4QkFBa0IsaUJBQWlCLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQjtBQUNySSxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQixDQUFDO0FBQUEsVUFDM0ksV0FBVyxFQUFFLHdDQUF3QyxjQUFjO0FBQ2xFLDhCQUFrQixpQkFBaUIsNkJBQTZCLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCO0FBQ3JJLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssa0JBQWtCLENBQUM7QUFBQSxVQUU3RjtBQUdBLGVBQUssaUJBQWlCLGFBQWEsY0FBYyxnQkFBZ0IsYUFBYSxTQUFTLG9CQUFvQixZQUFZO0FBQUEsUUFDeEgsQ0FBQztBQUFBLE1BQ0YsU0FBU0MsSUFBUDtBQUNELGFBQUlBLE1BQUEsZ0JBQUFBLEdBQUcsVUFBUyxrQkFBa0I7QUFDakMsZ0JBQU0sZUFBZSxnRUFBZ0UsS0FBSyxRQUFRQSxHQUFFO0FBQ3BHLGNBQUksd0JBQU8sY0FBYyxHQUFJO0FBQzdCLGtCQUFRLE1BQU0sWUFBWTtBQUFBLFFBQzNCO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFDQSxRQUFJLGlCQUFpQixHQUFHO0FBQ3ZCLFVBQUksZ0JBQWdCO0FBQ3BCLFVBQUksS0FBSyxTQUFTLG1CQUFrQjtBQUNuQyx3QkFBZ0IsS0FBSyxTQUFTO0FBQUEsTUFDL0I7QUFDQSxVQUFJLHdCQUFPLEdBQUcsaUJBQWlCLCtCQUErQjtBQUM5RCxjQUFRLElBQUksR0FBRyxpQkFBaUIsK0JBQStCO0FBQUEsSUFDaEU7QUFHQSxlQUFXLFlBQVk7QUFFdEIsWUFBTSxZQUFtQixxQkFBcUIsS0FBSyxTQUFTLFdBQVc7QUFDdkUsVUFBSSx3QkFBTyxzQkFBc0IsVUFBVSxnQkFBZ0IsVUFBVSxhQUFhO0FBQ2xGLGNBQVEsSUFBSSxjQUFjLFVBQVUsVUFBVSxVQUFVLGFBQWE7QUFDckUsWUFBTSxLQUFLLHVCQUF1QixLQUFLLFNBQVMsZ0JBQWdCLFNBQVM7QUFDekUsWUFBTSxLQUFLLGdDQUFnQyxLQUFLLFNBQVMsZ0JBQWdCLEtBQUssU0FBUyxXQUFXO0FBQ2xHLFlBQU0sS0FBSyxlQUFlO0FBQzFCLFlBQU0sS0FBSyxnQkFBZ0IscUJBQXFCO0FBQUEsSUFDakQsR0FBRyxHQUFJO0FBRVAsUUFBSSxvQkFBb0IsS0FBSyxLQUFLO0FBQUEsNkJBQXdFO0FBQUE7QUFBQSwyQkFBc0QsS0FBSyxTQUFTO0FBQUE7QUFBQSxnRkFBdUcsRUFBRSxLQUFLO0FBQUEsRUFDN1I7QUFBQSxFQUVRLGlCQUFpQixhQUFrQixjQUFzQixnQkFBd0IsYUFBcUIsU0FBaUIsb0JBQTRCLGNBQXNCO0FBQ2hMLGdCQUFZLGFBQWEsSUFBSSxjQUFjLFlBQVksYUFBYSxHQUFHLFlBQVk7QUFDbkYsZ0JBQVksbUJBQW1CLElBQUksY0FBYyxZQUFZLG1CQUFtQixHQUFHLGNBQWM7QUFDakcsZ0JBQVksY0FBYyxJQUFJLGNBQWMsWUFBWSxjQUFjLEdBQUcsV0FBVztBQUNwRixnQkFBWSxlQUFlLElBQUksY0FBYyxZQUFZLGVBQWUsR0FBRyxPQUFPO0FBQ2xGLGdCQUFZLG9DQUFvQyxJQUFJLGNBQWMsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0I7QUFDdkksZ0JBQVksZUFBZSxJQUFJLGNBQWMsWUFBWSxlQUFlLEdBQUcsWUFBWTtBQUFBLEVBQ3hGO0FBQUEsRUFFQSxXQUFXO0FBQ1YsWUFBUSxJQUFJLHFDQUFxQztBQUdqRCxRQUFJLEtBQUssWUFBWSxNQUFNO0FBQzFCLG9CQUFjLEtBQUssT0FBTztBQUMxQixXQUFLLFVBQVU7QUFBQSxJQUNoQjtBQUFBLEVBQ0Q7QUFBQSxFQUVBLE1BQU0sd0JBQXVCO0FBblY5QjtBQW9WRSxVQUFNLE9BQW9CLEtBQUssSUFBSSxVQUFVLGNBQWM7QUFDM0QsUUFBSSxRQUFRLE1BQU07QUFDakIsY0FBUSxNQUFNLHNDQUFzQztBQUFBLElBQ3JEO0FBRUEsUUFBSSwrQkFBK0I7QUFHbkMsVUFBTSxhQUFhLEtBQUssSUFBSSxVQUFVLG9CQUFvQiw2QkFBWTtBQUN0RSxVQUFNLGVBQWUseUNBQVksT0FBTztBQUN4QyxVQUFNLFdBQVcseUNBQVksS0FBSztBQUVsQyxRQUFJLGlCQUFpQjtBQUNyQixRQUFJLGFBQWE7QUFDakIsUUFBSSxxQkFBcUI7QUFFekIsUUFBSSxpQkFBaUIsVUFBYSxhQUFhLFFBQVc7QUFDekQsbUJBQWEsNEJBQTRCLGNBQWMsUUFBUTtBQUMvRCx1QkFBaUIsZUFBZSxVQUFVO0FBRzFDLFVBQUksaUJBQWlCLFFBQVEsYUFBYSxNQUFNO0FBQy9DLGNBQU0sRUFBRSxXQUFXLGtCQUFrQixVQUFVLElBQUksK0JBQStCLGNBQWMsVUFBVSxLQUFLLFNBQVMsc0JBQXNCLEtBQUssU0FBUyxvQkFBb0I7QUFDaEwsNkJBQXFCLDZCQUE2QixXQUFXLGtCQUFrQixTQUFTO0FBQUEsTUFDekY7QUFBQSxJQUNEO0FBRUEsUUFBSSxlQUFlO0FBQ25CLFFBQUksZUFBZTtBQUNuQixRQUFJLGNBQWM7QUFDbEIsUUFBSSxVQUFVO0FBRWQsUUFBSSxTQUFTLE1BQU07QUFDbEIscUJBQWUsb0JBQW1CLFVBQUssU0FBTCxZQUFhLEVBQUU7QUFDakQscUJBQWUsY0FBYyxJQUFJO0FBQ2pDLG9CQUFjLFlBQVksWUFBWTtBQUN0QyxnQkFBVSxhQUFhLG9CQUFvQixJQUFJLENBQUM7QUFFaEQsWUFBTSxlQUFlLG9CQUFvQixnQkFBZ0IsY0FBYyxhQUFhLFNBQVMsa0JBQWtCO0FBRS9HLFVBQUk7QUFDSCxjQUFNLEtBQUssSUFBSSxZQUFZLG1CQUFtQixNQUFNLENBQUMsZ0JBQWdCO0FBQ3BFLGNBQUksYUFBYTtBQUNoQixnQkFBSSxpQkFBaUI7QUFDckIsZ0JBQUksNkJBQTZCLFlBQVksZUFBZSxHQUFHLFlBQVksS0FBSyxHQUFFO0FBQ2pGLHNCQUFRLElBQUksbUJBQW1CO0FBQy9CLGdDQUFrQixxQkFBbUIsNkJBQTZCLFlBQVksZUFBZSxHQUFHLFlBQVk7QUFDNUcsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixxQkFBcUIsNkJBQTZCLGdDQUFnQyxZQUFZLENBQUM7QUFDdEksbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFXLEVBQUUsbUJBQW1CLGNBQWE7QUFDNUMsZ0NBQWtCLHFCQUFtQiw2QkFBNkIsS0FBSyxZQUFZO0FBQ25GLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIscUJBQXFCLDZCQUE2QixLQUFLLFlBQVksQ0FBQztBQUMzRyxtQkFBSyxnQkFBZ0IsUUFBUTtBQUM3Qiw2Q0FBK0I7QUFBQSxZQUNoQztBQUVBLGdCQUFJLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZLEtBQUssS0FBSyxpQkFBaUIsYUFBWTtBQUMvRyxnQ0FBa0IsaUJBQWUsNkJBQTZCLFlBQVksYUFBYSxHQUFHLFlBQVk7QUFDdEcsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksYUFBYSxHQUFHLFlBQVksQ0FBQztBQUM5SCxtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVcsRUFBRSxpQkFBaUIsY0FBYTtBQUMxQyxnQ0FBa0IsaUJBQWUsNkJBQTZCLEtBQUssWUFBWTtBQUMvRSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxZQUFZLENBQUM7QUFDdkcsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QjtBQUVBLGdCQUFJLDZCQUE2QixZQUFZLG1CQUFtQixHQUFHLGNBQWMsS0FBSyxHQUFFO0FBQ3ZGLGdDQUFrQixpQkFBZSw2QkFBNkIsWUFBWSxtQkFBbUIsR0FBRyxjQUFjO0FBQzlHLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUN0SSxtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVUsRUFBRSx1QkFBdUIsY0FBYTtBQUMvQyxnQ0FBa0IsaUJBQWUsNkJBQTZCLEtBQUssY0FBYztBQUNqRixvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxjQUFjLENBQUM7QUFDekcsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QjtBQUVBLGdCQUFJLDZCQUE2QixZQUFZLGNBQWMsR0FBRyxXQUFXLEtBQUssR0FBRTtBQUMvRSxnQ0FBa0IsaUJBQWUsNkJBQTZCLFlBQVksY0FBYyxHQUFHLFdBQVc7QUFDdEcsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksY0FBYyxHQUFHLFdBQVcsQ0FBQztBQUM5SCxtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVUsRUFBRSxrQkFBa0IsY0FBYTtBQUMxQyxnQ0FBa0IsaUJBQWUsNkJBQTZCLEtBQUssV0FBVztBQUM5RSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxXQUFXLENBQUM7QUFDdEcsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QjtBQUVBLGdCQUFJLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPLEtBQUssR0FBRTtBQUM1RSxnQ0FBa0IsaUJBQWUsNkJBQTZCLFlBQVksZUFBZSxHQUFHLE9BQU87QUFDbkcsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUMzSCxtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVUsRUFBRSxtQkFBbUIsY0FBYTtBQUMzQyxnQ0FBa0IsaUJBQWUsNkJBQTZCLEtBQUssT0FBTztBQUMxRSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxPQUFPLENBQUM7QUFDbEcsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QjtBQUVBLGdCQUFJLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQixLQUFLLEdBQUU7QUFDNUcsZ0NBQWtCLGlCQUFlLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQjtBQUNuSSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0IsQ0FBQztBQUMzSixtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVUsRUFBRSx3Q0FBd0MsY0FBYTtBQUNoRSxnQ0FBa0IsaUJBQWUsNkJBQTZCLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCO0FBQ25JLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixLQUFLLGtCQUFrQixDQUFDO0FBQzdHLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUI7QUFDQSxvQkFBUSxJQUFJLG1CQUFtQixnQkFBZ0I7QUFDL0MsZ0JBQUksaUJBQWlCLEdBQUU7QUFDdEIsb0JBQU0sZ0JBQWdCLHVCQUF1QixrQkFBa0IsS0FBSyxTQUFTLHFCQUFxQixLQUFLLFNBQVMsY0FBYztBQUM5SCxrQkFBSSx3QkFBTyxhQUFhO0FBQ3hCLHNCQUFRLElBQUksYUFBYTtBQUFBLFlBQzFCO0FBRUEsaUJBQUssaUJBQWlCLGFBQWEsY0FBYyxnQkFBZ0IsYUFBYSxTQUFTLG9CQUFvQixZQUFZO0FBQUEsVUFDeEg7QUFBQSxRQUNELENBQUM7QUFBQSxNQUNGLFNBQVNBLElBQVA7QUFDRCxhQUFJQSxNQUFBLGdCQUFBQSxHQUFHLFVBQVMsa0JBQWtCO0FBQ2pDLGdCQUFNLGVBQWUsZ0VBQWdFLEtBQUssUUFBUUEsR0FBRTtBQUNwRyxjQUFJLHdCQUFPLGNBQWMsR0FBSTtBQUM3QixrQkFBUSxNQUFNLFlBQVk7QUFBQSxRQUMzQjtBQUFBLE1BQ0Q7QUFDQSxVQUFJLHdCQUFPLHdCQUF3QjtBQUNuQyxjQUFRLElBQUksd0JBQXdCO0FBRXBDLFlBQU0sS0FBSyxnQkFBZ0IsS0FBSyxxQkFBcUI7QUFBQSxJQUN0RCxPQUFPO0FBQ04sY0FBUSxNQUFNLHNFQUFzRTtBQUFBLElBQ3JGO0FBQ0EsUUFBSSw4QkFBNkI7QUFDaEMsWUFBTSxLQUFLLDhCQUE4QjtBQUN6QyxZQUFNLEtBQUssK0JBQStCO0FBQUEsSUFDM0M7QUFBQSxFQUNEO0FBQUEsRUFHQSxNQUFNLGtCQUFpQjtBQUN0QixRQUFJLFFBQVE7QUFDWixRQUFHLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSyxTQUFTLHVCQUF1QixZQUFZLENBQUMsR0FBRTtBQUMvRSxXQUFLLFNBQVMsd0JBQXdCO0FBQ3RDLFdBQUssU0FBUyx3QkFBd0IsT0FBTyxPQUFPLEVBQUUsT0FBTyxZQUFZO0FBQ3pFLFlBQU0sS0FBSyxhQUFhO0FBQ3hCLGNBQVEsSUFBSSx5QkFBeUI7QUFDckMsY0FBUTtBQUFBLElBQ1Q7QUFDQSxRQUFHLENBQUMsZUFBZSxPQUFPLE9BQU8sS0FBSyxTQUFTLHdCQUF3QixZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsT0FBTyxPQUFPLEtBQUssU0FBUyx3QkFBd0IsWUFBWSxDQUFDLEdBQUU7QUFDdEssV0FBSyxTQUFTLHlCQUF5QjtBQUN2QyxXQUFLLFNBQVMseUJBQXlCLE9BQU8sT0FBTyxFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQUUsT0FBTyxZQUFZO0FBQzdGLFdBQUssc0JBQXNCLENBQUM7QUFFNUIsWUFBTSxLQUFLLGFBQWE7QUFDeEIsWUFBTSxLQUFLLGdCQUFnQixLQUFLLHFCQUFxQjtBQUNyRCxjQUFRLElBQUksMEJBQTBCO0FBQ3RDLGNBQVE7QUFBQSxJQUNUO0FBQ0EsUUFBRyxlQUFlLE9BQU8sT0FBTyxLQUFLLFNBQVMsd0JBQXdCLFlBQVksQ0FBQyxLQUFLLEtBQUssU0FBUywwQkFBMEIsR0FBRTtBQUNqSSxXQUFLLFNBQVMseUJBQXlCO0FBQ3ZDLFdBQUssU0FBUyx5QkFBeUIsT0FBTyxPQUFPLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxPQUFPLFlBQVk7QUFDN0YsWUFBTSxLQUFLLGFBQWE7QUFDeEIsY0FBUTtBQUFBLElBQ1Q7QUFDQSxRQUFJLE9BQU07QUFFVCxZQUFNLEtBQUssaUJBQWlCLEtBQUssU0FBUyxjQUFjO0FBQUEsSUFDekQ7QUFBQSxFQUVEO0FBQUEsRUFFQSxNQUFNLGdDQUErQjtBQUNwQyxRQUFJLDJCQUEyQixLQUFLLFNBQVM7QUFDdkMsUUFBSSwyQkFBMkIsR0FBRTtBQUN0QztBQUNBLFdBQUssU0FBUyx3QkFBd0I7QUFDdEMsWUFBTSxLQUFLLGFBQWE7QUFFeEIsVUFBRyw0QkFBNEIsR0FBRTtBQUVoQyxjQUFNLEtBQUssaUJBQWlCLEtBQUssU0FBUyxjQUFjO0FBQ3hELGdCQUFRLElBQUksR0FBRyxpREFBaUQ7QUFBQSxNQUNqRSxXQUFXLDRCQUE0QixHQUFHO0FBQ3pDLGFBQUssc0JBQXNCLEdBQUc7QUFFOUIsY0FBTSxLQUFLLGFBQWE7QUFDeEIsY0FBTSxLQUFLLGdCQUFnQixLQUFLLHFCQUFxQjtBQUNyRCxjQUFNLEtBQUssaUJBQWlCLHVCQUF1QjtBQUNuRCxjQUFNLFVBQVUsaUNBQWlDLDJCQUEyQixLQUFLLFNBQVMscUJBQXFCLEtBQUssU0FBUyxjQUFjO0FBQzNJLGdCQUFRLElBQUksNEJBQTRCLHFDQUFxQztBQUM3RSxZQUFJLHdCQUFPLE9BQU87QUFDbEIsZ0JBQVEsSUFBSSxPQUFPO0FBQUEsTUFDcEIsT0FBTztBQUVOLGdCQUFRLElBQUksR0FBRyxpREFBaUQ7QUFBQSxNQUNqRTtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLGlDQUFnQztBQUNyQyxRQUFHLGVBQWUsT0FBTyxPQUFPLEtBQUssU0FBUyx3QkFBd0IsWUFBWSxDQUFDLEdBQUU7QUFDcEYsWUFBTSxLQUFLLGtDQUFrQztBQUFBLElBQzlDLFdBQVcsVUFBVSxPQUFPLE9BQU8sS0FBSyxTQUFTLHdCQUF3QixZQUFZLENBQUMsR0FBRTtBQUV2RixjQUFRLElBQUksOENBQThDO0FBQUEsSUFDM0QsT0FBTztBQUNOLFdBQUssU0FBUyx5QkFBeUIsT0FBTyxPQUFPLEVBQUUsT0FBTyxZQUFZO0FBQzFFLFdBQUssU0FBUyx5QkFBeUI7QUFDdkMsWUFBTSxLQUFLLGFBQWE7QUFBQSxJQUN6QjtBQUFBLEVBQ0Q7QUFBQSxFQUVBLE1BQWMsb0NBQW9DO0FBQ2pELFFBQUksNEJBQTRCLEtBQUssU0FBUztBQUM5QyxRQUFJLDRCQUE0QixHQUFHO0FBQ2xDO0FBQ0EsV0FBSyxTQUFTLHlCQUF5QixPQUFPLE9BQU8sRUFBRSxPQUFPLFlBQVk7QUFDMUUsV0FBSyxTQUFTLHlCQUF5QjtBQUN2QyxZQUFNLEtBQUssYUFBYTtBQUV4QixZQUFNLEtBQUssc0NBQXNDLHlCQUF5QjtBQUFBLElBQzNFO0FBQUEsRUFDRDtBQUFBLEVBRUEsTUFBYyxzQ0FBc0MsMkJBQW1DO0FBQ3RGLFFBQUksNkJBQTZCLEdBQUc7QUFFbkMsWUFBTSxLQUFLLGlCQUFpQixLQUFLLFNBQVMsY0FBYztBQUN4RCxjQUFRLElBQUksR0FBRyx1REFBdUQ7QUFBQSxJQUN2RSxXQUFXLDZCQUE2QixHQUFHO0FBQzFDLFdBQUssc0JBQXNCLENBQUM7QUFFNUIsWUFBTSxLQUFLLGFBQWE7QUFDeEIsWUFBTSxLQUFLLGlCQUFpQix3QkFBd0I7QUFDcEQsY0FBUSxJQUFJLDZCQUE2QixpREFBaUQ7QUFDMUYsWUFBTSxVQUFVLGdDQUFnQyw0QkFBNEIsS0FBSyxTQUFTLHFCQUFxQixLQUFLLFNBQVMsY0FBYztBQUMzSSxVQUFJLHdCQUFPLE9BQU87QUFDbEIsY0FBUSxJQUFJLE9BQU87QUFBQSxJQUNwQixPQUFPO0FBRU4sY0FBUSxJQUFJLEdBQUcsdURBQXVEO0FBQUEsSUFDdkU7QUFBQSxFQUNEO0FBQUEsRUFFQSxNQUFNLGdCQUFnQixXQUEyQjtBQUNoRCxVQUFNLGVBQWUsa0JBQWtCLEtBQUssU0FBUyxZQUFZO0FBQ2pFLFVBQU0sc0JBQXNCLEtBQUssU0FBUyxlQUFlLGFBQWEsV0FBUyxhQUFhLGFBQWEsYUFBYSxVQUFRO0FBQzlILFVBQU0scUJBQXFCO0FBQzNCLFVBQU0sWUFBWSxLQUFLLE1BQU0scUJBQXFCLGtCQUFrQjtBQUNwRSxVQUFNLGdCQUFnQixLQUFLLFNBQVM7QUFDcEMsY0FBVSxRQUFRLGtCQUFXLEtBQUssU0FBUyxpQkFBaUIsS0FBSyxrQkFBa0Isb0JBQW9CLFNBQVMsY0FBTyxnQkFBZ0IsS0FBSyxxQkFBcUIsR0FBRztBQUFBLEVBQ3JLO0FBQUEsRUFFUSx1QkFBc0I7QUFDN0IsUUFBSSxZQUFZO0FBT2hCLFFBQUcsS0FBSyxTQUFTLG1CQUFrQjtBQUNsQyxrQkFBWTtBQUFBLElBQ2IsT0FBTztBQUNOLGtCQUFZO0FBQUEsSUFDYjtBQUNBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFFUSxrQkFBa0Isb0JBQTRCLFdBQW1CO0FBQ3hFLFFBQUksY0FBYztBQUNsQixhQUFTQyxLQUFJLEdBQUdBLE1BQUssb0JBQW9CQSxNQUFLO0FBQzdDLFVBQUlBLE1BQUssV0FBVztBQUNuQix1QkFBZTtBQUFBLE1BQ2hCLE9BQU87QUFDTix1QkFBZTtBQUFBLE1BQ2hCO0FBQUEsSUFDRDtBQUNBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFFQSxNQUFNLGVBQWU7QUFDcEIsU0FBSyxXQUFXLE9BQU8sT0FBTyxDQUFDLEdBQUcsaUJBQWlCLE1BQU0sS0FBSyxTQUFTLENBQUM7QUFDeEUsWUFBUSxJQUFJLGdCQUFnQjtBQUFBLEVBQzdCO0FBQUEsRUFHQSxNQUFNLGVBQWU7QUFDcEIsVUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQUEsRUFDbEM7QUFBQSxFQUVBLE1BQU0saUJBQWlCLGFBQXNDO0FBQzVELFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksZ0JBQWdCLEtBQUssU0FBUztBQUNsQyxRQUFJLEtBQUssU0FBUyxtQkFBa0I7QUFDbkMsc0JBQWdCLEtBQUssU0FBUztBQUFBLElBQy9CO0FBRUEsU0FBSyxTQUFTLGVBQWUsZUFBZSxnQkFBZ0IsaUJBQWlCLEtBQUssU0FBUztBQUMzRixVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFFakMsV0FBTyxLQUFLLGlCQUFpQixLQUFLLFNBQVMsY0FBYztBQUFBLEVBQzFEO0FBQUEsRUFFQSxNQUFNLHNCQUFzQixlQUFxQjtBQUNoRCxRQUFJLG1CQUFtQixZQUFZLEtBQUssU0FBUyxnQkFBZ0IsZUFBZSxRQUFRLENBQUMsQ0FBQztBQUMxRixRQUFHLG1CQUFtQixJQUFHO0FBQ3hCLHlCQUFtQjtBQUFBLElBQ3BCO0FBQ0EsU0FBSyxTQUFTLGdCQUFnQjtBQUM5QixTQUFLLFNBQVMsb0JBQW9CO0FBQ2xDLFVBQU0sS0FBSyxTQUFTLEtBQUssUUFBUTtBQUNqQyxZQUFRLElBQUksa0JBQWtCLEtBQUssU0FBUyxlQUFlO0FBQUEsRUFDNUQ7QUFBQSxFQUdBLE1BQU0sc0JBQXNCLGVBQXFCO0FBQ2hELFFBQUksbUJBQW1CLFlBQVksS0FBSyxTQUFTLGdCQUFnQixlQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQzFGLFNBQUssU0FBUyxnQkFBZ0I7QUFDOUIsUUFBSSxtQkFBbUIsR0FBRTtBQUN4Qix5QkFBbUI7QUFBQSxJQUNwQjtBQUNBLFNBQUssU0FBUyxnQkFBZ0I7QUFDOUIsU0FBSyxTQUFTLG9CQUFvQjtBQUNsQyxVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFBQSxFQUNsQztBQUFBLEVBS0EsTUFBTSxpQkFBaUIsZ0JBQXlDO0FBQy9ELFVBQU0sZUFBZSxJQUFJLE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CO0FBQzNFLFFBQUksZ0JBQWdCLE1BQU07QUFDekIsY0FBUSxJQUFJLFFBQVEsa0NBQWtDO0FBQ3RELGFBQU87QUFBQSxJQUNSO0FBQ0EsVUFBTSxPQUFPO0FBR2IsVUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QyxRQUFJLFlBQTJCO0FBQy9CLFFBQUksYUFBNEI7QUFDaEMsUUFBSSxhQUE0QjtBQUNoQyxRQUFJLGFBQTRCO0FBQ2hDLFFBQUksTUFBcUI7QUFDekIsUUFBSSxRQUF1QjtBQUMzQixRQUFJLE9BQXNCO0FBQzFCLFFBQUksU0FBd0I7QUFDNUIsUUFBSSxPQUFzQjtBQUMxQixRQUFJLFNBQXdCO0FBQzVCLFFBQUksT0FBc0I7QUFDMUIsUUFBSSxTQUF3QjtBQUU1QixVQUFNLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDaEMsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLE1BQU0sUUFBUUEsTUFBSztBQUN0QyxZQUFNLE9BQU8sTUFBTUEsRUFBQyxFQUFFLEtBQUs7QUFDM0IsVUFBSSxTQUFTLG1CQUFtQjtBQUMvQixZQUFJLGNBQWMsTUFBTTtBQUN2QixzQkFBWUE7QUFBQSxRQUNiO0FBQUEsTUFDRDtBQUNBLFVBQUksU0FBUyx3QkFBd0I7QUFDcEMsWUFBSSxlQUFlLE1BQU07QUFDeEIsdUJBQWFBO0FBQUEsUUFDZDtBQUFBLE1BQ0Q7QUFDQSxVQUFJLFNBQVMseUJBQXlCO0FBQ3JDLFlBQUksZUFBZSxNQUFNO0FBQ3hCLHVCQUFhQTtBQUFBLFFBQ2Q7QUFBQSxNQUNEO0FBQ0EsVUFBSSxTQUFTLGtCQUFrQjtBQUM5QixZQUFJLGVBQWUsTUFBTTtBQUN4Qix1QkFBYUE7QUFBQSxRQUNkO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxVQUFNLFlBQVksS0FBSyxTQUFTO0FBRWhDLFVBQU0sUUFBUSxrQkFBa0IsU0FBUztBQUN6QyxRQUFJLGNBQWMsS0FBSyxTQUFTO0FBQ2hDLFFBQUksZUFBZTtBQUNuQixRQUFJLEtBQUssU0FBUyxjQUFjLE1BQU0sT0FBTTtBQUUzQyxVQUFJLHdCQUFPLFFBQVEsMENBQTBDLE1BQU0sUUFBUTtBQUUzRSxxQkFBZSxxQkFBcUIsS0FBSyxTQUFTLGFBQWEsTUFBTSxLQUFLO0FBQzFFLFdBQUssU0FBUyxjQUFjLE1BQU07QUFDbEMsb0JBQWMsTUFBTTtBQUNwQixXQUFLLFNBQVMsaUJBQWlCLE1BQU07QUFDckMsWUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQUEsSUFDbEM7QUFFQSxVQUFNLGlCQUFpQixjQUFjO0FBQ3JDLFVBQU0sa0JBQWtCLHNCQUFzQixNQUFNLFFBQVEsc0JBQXNCLFlBQVksd0hBQXdILFlBQVksMERBQTBELGlCQUFpQixjQUFjLE1BQU0sU0FBUyxhQUFhLE1BQU0sYUFBYTtBQUMxVyxVQUFNLGlCQUFpQiwwQkFBMEIsMkJBQTJCLEtBQUssU0FBUyxxQkFBcUIsS0FBSyxTQUFTLGlCQUFpQixhQUFhLEtBQUssU0FBUyx3QkFBd0I7QUFDak0sVUFBTSx3QkFBaUMsSUFBSSxLQUFLLFNBQVM7QUFDekQsVUFBTSxrQkFBa0IsMkJBQTJCLDRCQUE0QixLQUFLLFNBQVMscUJBQXFCLEtBQUssU0FBUyxpQkFBaUIsa0JBQWtCLEtBQUssU0FBUyx5QkFBeUIsNklBQTZJLEtBQUssU0FBUyx5QkFBeUIsMERBQTBELHdCQUF3QjtBQUNoZCxVQUFNLGdCQUFnQiw4QkFBOEIsS0FBSyxTQUFTLGdCQUFnQjtBQUVsRixRQUFJLGFBQWEsUUFBUSxjQUFjLFFBQVEsY0FBYyxRQUFRLGNBQWMsTUFBSztBQUN2RixjQUFRLFlBQVk7QUFDcEIsWUFBTSxZQUFZO0FBQ2xCLGVBQVMsYUFBYSxJQUFJO0FBQzFCLGFBQU8sYUFBYTtBQUNwQixlQUFTLGFBQWEsSUFBRztBQUN6QixhQUFPLGFBQWEsS0FBSTtBQUN4QixlQUFTLGFBQWEsSUFBSTtBQUMxQixhQUFPLGFBQWE7QUFHcEIsWUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsaUJBQWlCLEdBQUcsTUFBTSxNQUFNLEdBQUcsQ0FBQztBQUNoRixZQUFNLFlBQVksQ0FBQyxHQUFHLFNBQVMsTUFBTSxHQUFHLE1BQU0sR0FBRyxnQkFBZ0IsR0FBRyxTQUFTLE1BQU0sSUFBSSxDQUFDO0FBQ3hGLFlBQU0sWUFBWSxDQUFDLEdBQUcsVUFBVSxNQUFNLEdBQUcsTUFBTSxHQUFHLGlCQUFpQixHQUFHLFVBQVUsTUFBTSxJQUFJLENBQUM7QUFDM0YsWUFBTSxZQUFZLENBQUMsR0FBRyxVQUFVLE1BQU0sR0FBRyxNQUFNLEdBQUcsZUFBZSxHQUFHLFVBQVUsTUFBTSxJQUFJLENBQUM7QUFDekYsWUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFVBQVUsS0FBSyxJQUFJLENBQUM7QUFBQSxJQUNsRDtBQUNBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFHQSxNQUFNLG1CQUFtQixnQkFBd0IsT0FBYTtBQUM3RCxVQUFNLGVBQWUsSUFBSSxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQjtBQUMzRSxRQUFJLGdCQUFnQixNQUFNO0FBQ3pCLGNBQVEsSUFBSSxRQUFRLGtDQUFrQztBQUN0RDtBQUFBLElBQ0Q7QUFDQSxVQUFNLE9BQU87QUFFYixVQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQ3pDLFFBQUksWUFBMkI7QUFDL0IsUUFBSSxhQUE0QjtBQUNoQyxRQUFJLE1BQXFCO0FBQ3pCLFFBQUksUUFBdUI7QUFDM0IsUUFBSSxPQUFzQjtBQUMxQixRQUFJLFNBQXdCO0FBRTVCLFVBQU0sUUFBUSxRQUFRLE1BQU0sSUFBSTtBQUNoQyxhQUFTQSxLQUFJLEdBQUdBLEtBQUksTUFBTSxRQUFRQSxNQUFLO0FBQ3RDLFlBQU0sT0FBTyxNQUFNQSxFQUFDLEVBQUUsS0FBSztBQUMzQixVQUFJLFNBQVMsaUJBQWlCO0FBQzdCLFlBQUksY0FBYyxNQUFNO0FBQ3ZCLHNCQUFZQTtBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQ0EsVUFBSSxTQUFTLE1BQU0sUUFBUSxRQUFRLE1BQU0sT0FBTyxLQUFJO0FBQ25ELFlBQUksZUFBZSxNQUFNO0FBQ3hCLHVCQUFhQTtBQUFBLFFBQ2Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUNBLFFBQUksYUFBYSxRQUFRLGNBQWMsTUFBSztBQUMzQyxZQUFNLFlBQVk7QUFDbEIsY0FBUSxZQUFZO0FBRXBCLGFBQU8sYUFBYTtBQUNwQixlQUFTLGFBQWE7QUFFdEIsWUFBTSxjQUFjLE9BQU8sTUFBTSxPQUFPLFFBQVEsTUFBTSxRQUFRLFNBQVMsTUFBTSxjQUFjLFNBQVMsT0FBTyxPQUFPLEVBQUUsT0FBTyxRQUFRLElBQUk7QUFDdkksWUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsYUFBYSxHQUFHLE1BQU0sTUFBTSxHQUFHLENBQUM7QUFDNUUsWUFBTSxZQUFZLENBQUMsR0FBRyxTQUFTLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxTQUFTLE1BQU0sSUFBSSxDQUFDO0FBQ3hFLFlBQU0sSUFBSSxNQUFNLE9BQU8sTUFBTSxVQUFVLEtBQUssSUFBSSxDQUFDO0FBQ2pELGNBQVEsSUFBSSxnQkFBZ0IsYUFBYTtBQUFBLElBQzFDO0FBQUEsRUFDRDtBQUFBLEVBRUEsTUFBTSx1QkFBdUIsZ0JBQXdCLE9BQWE7QUFDakUsVUFBTSxlQUFlLElBQUksTUFBTSxzQkFBc0IsR0FBRyxtQkFBbUI7QUFDM0UsUUFBSSxnQkFBZ0IsTUFBTTtBQUN6QixjQUFRLElBQUksUUFBUSxrQ0FBa0M7QUFDdEQ7QUFBQSxJQUNEO0FBQ0EsVUFBTSxPQUFPO0FBRWIsVUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QyxRQUFJLFlBQTJCO0FBQy9CLFFBQUksTUFBcUI7QUFDekIsUUFBSSxRQUF1QjtBQUUzQixVQUFNLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDaEMsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLE1BQU0sUUFBUUEsTUFBSztBQUN0QyxZQUFNLE9BQU8sTUFBTUEsRUFBQyxFQUFFLEtBQUs7QUFDM0IsVUFBSSxTQUFTLGlCQUFpQjtBQUM3QixZQUFJLGNBQWMsTUFBTTtBQUN2QixzQkFBWUE7QUFBQSxRQUNiO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFDQSxRQUFJLGFBQWEsTUFBTTtBQUN0QixZQUFNLFlBQVk7QUFDbEIsY0FBUSxZQUFZO0FBRXBCLFlBQU0sY0FBYyxPQUFPLE1BQU0sT0FBTyxXQUFXLE1BQU0sY0FBYyxTQUFTLE9BQU8sT0FBTyxFQUFFLE9BQU8sUUFBUSxJQUFJO0FBQ25ILFlBQU0sV0FBVyxDQUFDLEdBQUcsTUFBTSxNQUFNLEdBQUcsS0FBSyxHQUFHLGFBQWEsR0FBRyxNQUFNLE1BQU0sR0FBRyxDQUFDO0FBQzVFLFlBQU0sSUFBSSxNQUFNLE9BQU8sTUFBTSxTQUFTLEtBQUssSUFBSSxDQUFDO0FBQ2hELGNBQVEsSUFBSSxnQkFBZ0IsYUFBYTtBQUFBLElBQzFDO0FBQUEsRUFDRDtBQUFBLEVBRUEsTUFBTSxnQ0FBZ0MsZ0JBQXdCLE9BQWM7QUFDM0UsVUFBTSxlQUFlLElBQUksTUFBTSxzQkFBc0IsR0FBRyxtQkFBbUI7QUFDM0UsUUFBSSxnQkFBZ0IsTUFBTTtBQUN6QixjQUFRLElBQUksUUFBUSxrQ0FBa0M7QUFDdEQ7QUFBQSxJQUNEO0FBQ0EsVUFBTSxPQUFPO0FBRWIsVUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QyxRQUFJLFlBQTJCO0FBQy9CLFFBQUksYUFBNEI7QUFFaEMsVUFBTSxRQUFRLFFBQVEsTUFBTSxJQUFJO0FBQ2hDLGFBQVNBLEtBQUksR0FBR0EsS0FBSSxNQUFNLFFBQVFBLE1BQUs7QUFDdEMsWUFBTSxPQUFPLE1BQU1BLEVBQUMsRUFBRSxLQUFLO0FBQzNCLFVBQUksU0FBUyxvQkFBb0I7QUFDaEMsWUFBSSxjQUFjLE1BQU07QUFDdkIsc0JBQVlBO0FBQUEsUUFDYjtBQUFBLE1BQ0Q7QUFDQSxVQUFJLGFBQWEsUUFBUSxjQUFjLE1BQUs7QUFFM0MsY0FBTSxhQUFhO0FBRW5CLGNBQU1DLFNBQVEsS0FBSyxNQUFNLFVBQVU7QUFFbkMsWUFBR0EsUUFBTTtBQUNSLGdCQUFNLGNBQWMsU0FBU0EsT0FBTSxDQUFDLEdBQUcsRUFBRTtBQUN6QyxjQUFJLGNBQWMsT0FBTztBQUN4Qix5QkFBYUQ7QUFBQSxVQUNkO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQ0EsUUFBSSxhQUFhLFFBQVEsY0FBYyxNQUFLO0FBQzNDLFlBQU0sV0FBVyxDQUFDLEdBQUcsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEdBQUcsR0FBRyxNQUFNLE1BQU0sVUFBVSxDQUFDO0FBQzlFLFlBQU0sSUFBSSxNQUFNLE9BQU8sTUFBTSxTQUFTLEtBQUssSUFBSSxDQUFDO0FBQUEsSUFDakQ7QUFBQSxFQUNEO0FBQUEsRUFHQSxNQUFNLFlBQVksT0FBOEI7QUFDL0MsVUFBTSxRQUFRLE1BQU0saUJBQWlCO0FBQ3JDLFVBQU0sZUFBZSx5QkFBeUIsS0FBSztBQUduRCxVQUFNLGVBQWUsYUFBYSxLQUFLO0FBR3ZDLFFBQUksZUFBZTtBQUNuQixRQUFJLFlBQVksSUFBSSxLQUFLLFlBQVk7QUFFckMsVUFBTSxzQkFBc0Isb0JBQUksSUFBb0I7QUFDcEQsVUFBTSxhQUFhLGNBQWMsSUFBSSxLQUFLLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNuRSxRQUFJLGFBQWEsVUFBVSxTQUFTLElBQUUsSUFBSSxNQUFNLFVBQVUsWUFBWTtBQUN0RSxRQUFJLFNBQVM7QUFVYixtQkFBZTtBQUNmLGdCQUFZLElBQUksS0FBSyxZQUFZO0FBQ2pDLGlCQUFhLFVBQVUsU0FBUyxJQUFFLElBQUksTUFBTSxVQUFVLFlBQVk7QUFFbEUsV0FBTyxlQUFlLFlBQVc7QUFDaEMsbUJBQWEsVUFBVSxTQUFTLElBQUUsSUFBSSxNQUFNLFVBQVUsWUFBWTtBQUVsRSxlQUFTLFNBQVMsYUFBYTtBQUMvQixnQkFBVSxTQUFTLFVBQVUsU0FBUyxJQUFJLENBQUM7QUFDM0Msc0JBQWdCO0FBQ2hCLDBCQUFvQixJQUFJLFlBQVksQ0FBQztBQUFBLElBQ3RDO0FBQ0EsYUFBUyxPQUFPLE1BQU0sR0FBRSxPQUFPLFNBQU8sQ0FBQztBQWtCdkMsVUFBTSxvQkFBb0IscUJBQXFCLEtBQUs7QUFDcEQsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLGtCQUFrQixRQUFRQSxNQUFJO0FBRWpELFlBQU0sZ0JBQWdCLE9BQU8sa0JBQWtCQSxFQUFDLEdBQUcsUUFBUTtBQUMzRCxZQUFNLGVBQWUsb0JBQW9CLElBQUksYUFBYTtBQUUxRCxVQUFJLGlCQUFpQixRQUFXO0FBQy9CLDRCQUFvQixJQUFJLGVBQWUsZUFBZSxDQUFDO0FBQUEsTUFDeEQsT0FBTztBQUVOLDRCQUFvQixJQUFJLGVBQWUsQ0FBQztBQUFBLE1BQ3pDO0FBQUEsSUFDRDtBQVVBLFFBQUkscUJBQXFCO0FBQ3pCLGVBQVcsQ0FBQyxLQUFLLEtBQUsscUJBQXFCO0FBRTFDLDJCQUFxQixxQkFBcUIsUUFBUTtBQUFBLElBQ25EO0FBQ0EseUJBQXFCLG1CQUFtQixNQUFNLEdBQUUsbUJBQW1CLFNBQU8sQ0FBQztBQUUzRSxXQUFPLGtCQUFrQixRQUFRLG9CQUFvQixLQUFLLFNBQVMsc0JBQXNCO0FBQUEsRUFDMUY7QUFBQSxFQUVBLE1BQU0sZ0JBQWdCLFVBQTJCO0FBQ2hELGFBQVMsS0FBSyxDQUFDLFdBQW1CO0FBQ2pDLFVBQUcsUUFBTztBQUNULGNBQU0sUUFBZ0IsaUJBQWlCLEtBQUssU0FBUyxhQUFhLEtBQUs7QUFDdkUsWUFBSSx3QkFBTyxzQkFBc0IsTUFBTSxnQkFBZ0IsTUFBTSxhQUFhO0FBQzFFLGdCQUFRLElBQUksc0JBQXNCLE1BQU0sZ0JBQWdCLE1BQU0sYUFBYTtBQUUzRSxhQUFLLG1CQUFtQixLQUFLLFNBQVMsZ0JBQWdCLEtBQUs7QUFDM0QsYUFBSyxTQUFTLG9CQUFvQjtBQUNsQyxhQUFLLFNBQVMscUJBQXFCO0FBQ25DLGFBQUssU0FBUyxLQUFLLFFBQVE7QUFBQSxNQUM1QjtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFBQSxFQUdBLE1BQU0sNEJBQTRCO0FBRWpDLFVBQU0sRUFBRSxNQUFNLElBQUksS0FBSztBQUt2QixVQUFNLGVBQWUsTUFBTSxnQkFBZ0IsS0FBSyxLQUFLLEtBQUssU0FBUyxhQUFhLEtBQUssU0FBUyxhQUFhO0FBQzNHLGVBQVcsWUFBWSxhQUFhLEtBQUssR0FBRztBQUMzQyxZQUFNLFFBQVEsTUFBTSxTQUFTO0FBQzdCLFlBQU0sT0FBTyxNQUFNLEtBQUssQ0FBQUUsVUFBUUEsTUFBSyxhQUFhLFFBQVE7QUFDMUQsVUFBSSxDQUFDLE1BQU07QUFDVixnQkFBUSxLQUFLLFFBQVEscUJBQXFCO0FBQzFDO0FBQUEsTUFDRDtBQUVBLGNBQVEsSUFBSSxtQkFBbUIsVUFBVTtBQUN6QyxVQUFJO0FBQ0gsY0FBTSxLQUFLLElBQUksWUFBWSxtQkFBbUIsTUFBTSxDQUFDLGdCQUFnQjtBQUNwRSxpQkFBTyxZQUFZLGFBQWE7QUFDaEMsaUJBQU8sWUFBWSxtQkFBbUI7QUFDdEMsaUJBQU8sWUFBWSxjQUFjO0FBQ2pDLGlCQUFPLFlBQVksZUFBZTtBQUNsQyxpQkFBTyxZQUFZLG9DQUFvQztBQUN2RCxpQkFBTyxZQUFZLGVBQWU7QUFBQSxRQUNuQyxDQUFDO0FBQUEsTUFDRixTQUFTSCxJQUFQO0FBQ0QsYUFBSUEsTUFBQSxnQkFBQUEsR0FBRyxVQUFTLGtCQUFrQjtBQUNqQyxnQkFBTSxlQUFlLGlEQUFpREEsR0FBRTtBQUN4RSxjQUFJLHdCQUFPLGNBQWMsR0FBSTtBQUM3QixrQkFBUSxNQUFNLFlBQVk7QUFBQSxRQUMzQjtBQUFBLE1BQ0Q7QUFBQSxJQUVEO0FBQUEsRUFDRDtBQUFBLEVBRUEsTUFBTSxvQkFBb0IsY0FBc0M7QUFDL0QsUUFBSSxpQkFBaUI7QUFDckIsYUFBU0MsS0FBSSxjQUFjQSxLQUFJLEtBQUtBLE1BQUk7QUFDdkMsWUFBTSxRQUFnQixpQkFBaUJBLElBQUcsSUFBSTtBQUU5QyxZQUFNLGFBQWE7QUFFbkIsWUFBTUMsU0FBUSxNQUFNLE1BQU0sTUFBTSxVQUFVO0FBQzFDLFVBQUdBLFFBQU07QUFDUixjQUFNLGNBQWMsU0FBU0EsT0FBTSxDQUFDLEdBQUcsRUFBRTtBQUN6QyxZQUFJLGNBQWMsZ0JBQWdCLGtCQUFrQixHQUFJO0FBQ3ZELDJCQUFpQjtBQUFBLFFBQ2xCO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsTUFBTSxpQkFBa0M7QUFDdkMsVUFBTSxjQUFjLE1BQU0sS0FBSyxvQkFBb0IsS0FBSyxTQUFTLFdBQVc7QUFDNUUsVUFBTSxzQkFBc0IscUJBQXFCLFdBQVc7QUFJNUQsVUFBTSxnQkFBZ0IsS0FBSyxPQUFPLHNCQUFzQixLQUFLLFNBQVMsZ0JBQWMsS0FBRyxHQUFHO0FBQzFGLFNBQUssU0FBUyxxQkFBcUI7QUFDbkMsU0FBSyxTQUFTLG9CQUFvQjtBQUNsQyxVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFFakMsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVBLE1BQU0saUJBQWlCO0FBemhDeEI7QUEwaENFLFVBQU0sZUFBZSxJQUFJLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxTQUFTLG1CQUFtQjtBQUN6RixRQUFJLGNBQWE7QUFDaEIsWUFBTSxlQUFhLFVBQUssSUFBSSxVQUFVLGNBQWMsTUFBakMsbUJBQW9DLFNBQVE7QUFDL0QsWUFBTSxJQUFJLFVBQVUsYUFBYSxhQUFhLE1BQU0sVUFBVTtBQUFBLElBQy9ELE9BQU87QUFDTixjQUFRLElBQUksbUNBQW1DO0FBQUEsSUFDaEQ7QUFBQSxFQUNEO0FBRUQ7QUFHQSxTQUFTLFVBQVUsV0FBNEI7QUFDOUMsUUFBTSxjQUFjLE9BQU8sT0FBTztBQUNsQyxTQUFPLFlBQVksT0FBTyxXQUFXLEtBQUs7QUFDM0M7QUFFQSxTQUFTLGVBQWUsV0FBNEI7QUFDbkQsUUFBTSxzQkFBc0IsT0FBTyxPQUFPLEVBQUUsU0FBUyxHQUFHLEtBQUs7QUFDN0QsU0FBTyxVQUFVLE9BQU8scUJBQXFCLEtBQUs7QUFDbkQ7QUFLQSxlQUFlLGlCQUFpQkUsTUFBVSxVQUFpQztBQU0xRSxRQUFNLGVBQWVBLEtBQUksTUFBTSxzQkFBc0IsR0FBRyxhQUFhO0FBQ3JFLE1BQUksd0JBQXdCLHdCQUFPO0FBQ2xDLFlBQVEsSUFBSSxRQUFRLDRCQUE0QjtBQUNoRDtBQUFBLEVBQ0Q7QUFFQSxRQUFNQSxLQUFJLE1BQU0sT0FBTyxHQUFHLGVBQWUsaUJBQWlCO0FBRTNEO0FBR0EsSUFBTSxzQkFBTixjQUFrQyx1QkFBTTtBQUFBO0FBQUEsRUFHdkMsWUFBWUEsTUFBVSxhQUFxQjtBQUMxQyxVQUFNQSxJQUFHO0FBQ1QsU0FBSyxjQUFjO0FBQUEsRUFDcEI7QUFBQSxFQUVBLFNBQVM7QUFDUixVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsUUFBUSxLQUFLLFdBQVc7QUFBQSxFQUNuQztBQUFBLEVBRUEsVUFBVTtBQUNULFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQUEsRUFDakI7QUFDRDtBQUdBLGVBQWUscUJBQXFCLFFBQWdCLFFBQWdCO0FBQ25FLFFBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFFdEUsTUFBSSxDQUFDLFlBQVk7QUFDaEIsWUFBUSxNQUFNLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Q7QUFFQSxRQUFNLFNBQVMsV0FBVztBQUMxQixRQUFNLGVBQWUsT0FBTyxhQUFhO0FBRXpDLE1BQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQVEsTUFBTSxzRUFBc0U7QUFDcEY7QUFBQSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRjb25zdCBjdXJyZW50RGF0ZSA9IHdpbmRvdy5tb21lbnQoKTtcclxuXHRcdFx0Y29uc3QgZGF5c1Bhc3NlZCA9IGN1cnJlbnREYXRlLmRpZmYod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJyksICdkYXlzJykgLSAxOyAvL3RvZGF5IGlzIHN0aWxsIGEgY2hhbmNlLiBcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLmRlY3JlYXNlU3RyZWFrYm9vc3RlcihkYXlzUGFzc2VkKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtkYXlzUGFzc2VkfSBkYXlzIHBhc3NlZGApXHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIGNyZWF0ZWQuYClcclxuXHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBOb3RlcyBjcmVhdGVkIHRvZGF5LmApXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAxO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGlmIChjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzIDwgNykge1xyXG5cdFx0XHRjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcikge1xyXG5cdFx0aWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPD0gNikge1xyXG5cdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fSBlbHNlIGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpIHtcclxuXHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMSk7XHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSlcclxuXHRcdFx0Y29uc29sZS5sb2coYFdlZWtseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwO1xyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9fFx1RDgzRFx1REU4MCR7Ym9vc3RlckZhY3Rvcn0ke3RoaXMucmF0ZUJvb3N0ZXJEaXJlY3Rpb24oKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnXHJcblx0XHQvKmNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0XHRpZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwNlx1RkUwRidcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnXHJcblx0XHR9Ki9cclxuXHRcdGlmKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUpe1xyXG5cdFx0XHRkaXJlY3Rpb24gPSAnXHUyQjA2XHVGRTBGJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRpcmVjdGlvblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld0Jvb3N0ZXJGYWtmb3IgPSBwYXJzZUZsb2F0KCh0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyBpbmNyZWFzZVZhbHVlKS50b0ZpeGVkKDEpKTtcclxuXHRcdGlmKG5ld0Jvb3N0ZXJGYWtmb3IgPiA4MCl7XHJcblx0XHRcdG5ld0Jvb3N0ZXJGYWtmb3IgPSA4MDtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld0Jvb3N0ZXJGYWtmb3I7XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gdHJ1ZTtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdGNvbnNvbGUubG9nKGBzdHJlYWtib29zdGVyOiAke3RoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3Rlcn1gKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGRlY3JlYXNlU3RyZWFrYm9vc3RlcihkZWNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHRsZXQgbmV3Qm9vc3RlckZha2ZvciA9IHBhcnNlRmxvYXQoKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtIGRlY3JlYXNlVmFsdWUpLnRvRml4ZWQoMSkpXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdCb29zdGVyRmFrZm9yXHJcblx0XHRpZiAobmV3Qm9vc3RlckZha2ZvciA8IDApe1xyXG5cdFx0XHRuZXdCb29zdGVyRmFrZm9yID0gMFxyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3Qm9vc3RlckZha2ZvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IGZhbHNlO1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEs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QVEsT0FBTyxHQUFHLFlBQVksS0FBTztBQUFBLEVBQy9DLEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdEQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQ3pEO0FBRU8sU0FBUyxrQkFBa0IsUUFBMkI7QUFDM0QsTUFBSSxRQUFtQixVQUFVLENBQUM7QUFDbEMsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxVQUFVLEtBQUssUUFBUTtBQUN6QixjQUFRO0FBQUEsSUFDVixPQUFPO0FBQ0w7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVPLFNBQVMscUJBQXFCLGFBQTZCO0FBQ2hFLE1BQUksZUFBZTtBQUNuQixhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLGVBQWUsS0FBSyxTQUFTLGdCQUFnQixHQUFHO0FBQ2xELHFCQUFlLEtBQUs7QUFBQSxJQUN0QjtBQUFBLEVBQ0Y7QUFHRixTQUFPO0FBQ1A7OztBQzlJRixJQUFNLDBCQUFvQztBQUFBLEVBQ3pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxrQkFBNEI7QUFBQSxFQUNqQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFB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YUFBYTtBQUV6QyxNQUFJLENBQUMsY0FBYztBQUNsQixZQUFRLE1BQU0sc0VBQXNFO0FBQ3BGO0FBQUEsRUFDRDtBQUVBLE1BQUksZUFBZSxhQUFhLFdBQVcsUUFBUSxrQkFBTTtBQUN6RCxpQkFBZSxhQUFhLFdBQVcsUUFBUSwwQkFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsNEJBQVEsTUFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsb0JBQVEsTUFBTTtBQUVyRCxTQUFPLGlCQUFpQixZQUFZO0FBQ3JDO0FBRUEsU0FBUyw2QkFBNkIsZUFBdUIsV0FBMkI7QUFDdkYsTUFBSTtBQUNKLE1BQUksU0FBUyxlQUFlLEVBQUUsSUFBSSxXQUFVO0FBQzNDLG1CQUFlLFlBQVksU0FBUyxlQUFlLEVBQUU7QUFBQSxFQUN0RCxPQUFPO0FBQ04sbUJBQWU7QUFBQSxFQUNoQjtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImFwcCIsICJvYmoiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiTUlMTElTRUNPTkRTX0lOX1dFRUsiLCAiZm9ybWF0dGVycyIsICJsb2NhbGl6ZSIsICJ5IiwgIk0iLCAiZCIsICJhIiwgImgiLCAiSCIsICJtIiwgInMiLCAiUyIsICJkYXRlTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXRMb25nIiwgInRpbWVMb25nRm9ybWF0dGVyIiwgImRhdGVUaW1lTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXQiLCAiZm9ybWF0RGlzdGFuY2UiLCAiZm9ybWF0IiwgImZvcm1hdFJlbGF0aXZlIiwgIm9yZGluYWxOdW1iZXIiLCAidmFsdWVDYWxsYmFjayIsICJkZWZhdWx0T3B0aW9ucyIsICJsb2NhbGUiLCAibWF0Y2giLCAicGF0aCIsICJhcHAiLCAiZmlsZU5hbWUiLCAiY3VycmVudENvdW50IiwgImkiLCAiaSIsICJlIiwgImkiLCAibWF0Y2giLCAiZmlsZSIsICJhcHAiXQp9Cg== diff --git a/src/main.ts b/src/main.ts index 1403e27..3c356f7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -484,9 +484,11 @@ export default class gamification extends Plugin { reset = true; } if(!isOneDayBefore(window.moment(this.settings.weeklyNoteCreationDate, 'DD.MM.YYYY')) && !isSameDay(window.moment(this.settings.weeklyNoteCreationDate, 'DD.MM.YYYY'))){ + const daysPassed = window.moment().diff(window.moment(this.settings.weeklyNoteCreationDate, 'DD.MM.YYYY'), 'days') - 1; //today is still a chance. this.settings.weeklyNoteCreationTask = 0; this.settings.weeklyNoteCreationDate = window.moment().subtract(1, 'day').format('DD.MM.YYYY') - this.decreaseStreakbooster(1) + this.decreaseStreakbooster(daysPassed) + console.log(`${daysPassed} days passed`) //this.settings.streakboosterDate = window.moment().subtract(1, 'day').format('DD.MM.YYYY') await this.saveSettings(); await this.updateStatusBar(this.statusbarGamification) From f33451bfc014d87c96b04f8a12cd23ccd392b6e9 Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Fri, 6 Oct 2023 18:18:31 +0200 Subject: [PATCH 14/15] generate js --- main.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/main.js b/main.js index 4e8057b..a2793f0 100644 --- a/main.js +++ b/main.js @@ -2966,8 +2966,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` reset = true; } if (!isOneDayBefore(window.moment(this.settings.weeklyNoteCreationDate, "DD.MM.YYYY")) && !isSameDay(window.moment(this.settings.weeklyNoteCreationDate, "DD.MM.YYYY"))) { - const currentDate = window.moment(); - const daysPassed = currentDate.diff(window.moment(this.settings.weeklyNoteCreationDate, "DD.MM.YYYY"), "days") - 1; + const daysPassed = window.moment().diff(window.moment(this.settings.weeklyNoteCreationDate, "DD.MM.YYYY"), "days") - 1; this.settings.weeklyNoteCreationTask = 0; this.settings.weeklyNoteCreationDate = window.moment().subtract(1, "day").format("DD.MM.YYYY"); this.decreaseStreakbooster(daysPassed); @@ -3467,4 +3466,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRjb25zdCBjdXJyZW50RGF0ZSA9IHdpbmRvdy5tb21lbnQoKTtcclxuXHRcdFx0Y29uc3QgZGF5c1Bhc3NlZCA9IGN1cnJlbnREYXRlLmRpZmYod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJyksICdkYXlzJykgLSAxOyAvL3RvZGF5IGlzIHN0aWxsIGEgY2hhbmNlLiBcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLmRlY3JlYXNlU3RyZWFrYm9vc3RlcihkYXlzUGFzc2VkKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtkYXlzUGFzc2VkfSBkYXlzIHBhc3NlZGApXHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIGNyZWF0ZWQuYClcclxuXHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBOb3RlcyBjcmVhdGVkIHRvZGF5LmApXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAxO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGlmIChjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzIDwgNykge1xyXG5cdFx0XHRjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcikge1xyXG5cdFx0aWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPD0gNikge1xyXG5cdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fSBlbHNlIGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpIHtcclxuXHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMSk7XHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSlcclxuXHRcdFx0Y29uc29sZS5sb2coYFdlZWtseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwO1xyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9fFx1RDgzRFx1REU4MCR7Ym9vc3RlckZhY3Rvcn0ke3RoaXMucmF0ZUJvb3N0ZXJEaXJlY3Rpb24oKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnXHJcblx0XHQvKmNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0XHRpZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwNlx1RkUwRidcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnXHJcblx0XHR9Ki9cclxuXHRcdGlmKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUpe1xyXG5cdFx0XHRkaXJlY3Rpb24gPSAnXHUyQjA2XHVGRTBGJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRpcmVjdGlvblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld0Jvb3N0ZXJGYWtmb3IgPSBwYXJzZUZsb2F0KCh0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyBpbmNyZWFzZVZhbHVlKS50b0ZpeGVkKDEpKTtcclxuXHRcdGlmKG5ld0Jvb3N0ZXJGYWtmb3IgPiA4MCl7XHJcblx0XHRcdG5ld0Jvb3N0ZXJGYWtmb3IgPSA4MDtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld0Jvb3N0ZXJGYWtmb3I7XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gdHJ1ZTtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdGNvbnNvbGUubG9nKGBzdHJlYWtib29zdGVyOiAke3RoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3Rlcn1gKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGRlY3JlYXNlU3RyZWFrYm9vc3RlcihkZWNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHRsZXQgbmV3Qm9vc3RlckZha2ZvciA9IHBhcnNlRmxvYXQoKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtIGRlY3JlYXNlVmFsdWUpLnRvRml4ZWQoMSkpXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdCb29zdGVyRmFrZm9yXHJcblx0XHRpZiAobmV3Qm9vc3RlckZha2ZvciA8IDApe1xyXG5cdFx0XHRuZXdCb29zdGVyRmFrZm9yID0gMFxyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3Qm9vc3RlckZha2ZvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IGZhbHNlO1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEs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QVEsT0FBTyxHQUFHLFlBQVksS0FBTztBQUFBLEVBQy9DLEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdEQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQ3pEO0FBRU8sU0FBUyxrQkFBa0IsUUFBMkI7QUFDM0QsTUFBSSxRQUFtQixVQUFVLENBQUM7QUFDbEMsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxVQUFVLEtBQUssUUFBUTtBQUN6QixjQUFRO0FBQUEsSUFDVixPQUFPO0FBQ0w7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVPLFNBQVMscUJBQXFCLGFBQTZCO0FBQ2hFLE1BQUksZUFBZTtBQUNuQixhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLGVBQWUsS0FBSyxTQUFTLGdCQUFnQixHQUFHO0FBQ2xELHFCQUFlLEtBQUs7QUFBQSxJQUN0QjtBQUFBLEVBQ0Y7QUFHRixTQUFPO0FBQ1A7OztBQzlJRixJQUFNLDBCQUFvQztBQUFBLEVBQ3pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxrQkFBNEI7QUFBQSxFQUNqQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFB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YUFBYTtBQUV6QyxNQUFJLENBQUMsY0FBYztBQUNsQixZQUFRLE1BQU0sc0VBQXNFO0FBQ3BGO0FBQUEsRUFDRDtBQUVBLE1BQUksZUFBZSxhQUFhLFdBQVcsUUFBUSxrQkFBTTtBQUN6RCxpQkFBZSxhQUFhLFdBQVcsUUFBUSwwQkFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsNEJBQVEsTUFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsb0JBQVEsTUFBTTtBQUVyRCxTQUFPLGlCQUFpQixZQUFZO0FBQ3JDO0FBRUEsU0FBUyw2QkFBNkIsZUFBdUIsV0FBMkI7QUFDdkYsTUFBSTtBQUNKLE1BQUksU0FBUyxlQUFlLEVBQUUsSUFBSSxXQUFVO0FBQzNDLG1CQUFlLFlBQVksU0FBUyxlQUFlLEVBQUU7QUFBQSxFQUN0RCxPQUFPO0FBQ04sbUJBQWU7QUFBQSxFQUNoQjtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImFwcCIsICJvYmoiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiTUlMTElTRUNPTkRTX0lOX1dFRUsiLCAiZm9ybWF0dGVycyIsICJsb2NhbGl6ZSIsICJ5IiwgIk0iLCAiZCIsICJhIiwgImgiLCAiSCIsICJtIiwgInMiLCAiUyIsICJkYXRlTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXRMb25nIiwgInRpbWVMb25nRm9ybWF0dGVyIiwgImRhdGVUaW1lTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXQiLCAiZm9ybWF0RGlzdGFuY2UiLCAiZm9ybWF0IiwgImZvcm1hdFJlbGF0aXZlIiwgIm9yZGluYWxOdW1iZXIiLCAidmFsdWVDYWxsYmFjayIsICJkZWZhdWx0T3B0aW9ucyIsICJsb2NhbGUiLCAibWF0Y2giLCAicGF0aCIsICJhcHAiLCAiZmlsZU5hbWUiLCAiY3VycmVudENvdW50IiwgImkiLCAiaSIsICJlIiwgImkiLCAibWF0Y2giLCAiZmlsZSIsICJhcHAiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRjb25zdCBkYXlzUGFzc2VkID0gd2luZG93Lm1vbWVudCgpLmRpZmYod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJyksICdkYXlzJykgLSAxOyAvL3RvZGF5IGlzIHN0aWxsIGEgY2hhbmNlLiBcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLmRlY3JlYXNlU3RyZWFrYm9vc3RlcihkYXlzUGFzc2VkKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtkYXlzUGFzc2VkfSBkYXlzIHBhc3NlZGApXHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIGNyZWF0ZWQuYClcclxuXHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBOb3RlcyBjcmVhdGVkIHRvZGF5LmApXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAxO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGlmIChjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzIDwgNykge1xyXG5cdFx0XHRjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcikge1xyXG5cdFx0aWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPD0gNikge1xyXG5cdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fSBlbHNlIGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpIHtcclxuXHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMSk7XHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSlcclxuXHRcdFx0Y29uc29sZS5sb2coYFdlZWtseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwO1xyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9fFx1RDgzRFx1REU4MCR7Ym9vc3RlckZhY3Rvcn0ke3RoaXMucmF0ZUJvb3N0ZXJEaXJlY3Rpb24oKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnXHJcblx0XHQvKmNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0XHRpZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwNlx1RkUwRidcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnXHJcblx0XHR9Ki9cclxuXHRcdGlmKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUpe1xyXG5cdFx0XHRkaXJlY3Rpb24gPSAnXHUyQjA2XHVGRTBGJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRpcmVjdGlvblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld0Jvb3N0ZXJGYWtmb3IgPSBwYXJzZUZsb2F0KCh0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyBpbmNyZWFzZVZhbHVlKS50b0ZpeGVkKDEpKTtcclxuXHRcdGlmKG5ld0Jvb3N0ZXJGYWtmb3IgPiA4MCl7XHJcblx0XHRcdG5ld0Jvb3N0ZXJGYWtmb3IgPSA4MDtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld0Jvb3N0ZXJGYWtmb3I7XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gdHJ1ZTtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdGNvbnNvbGUubG9nKGBzdHJlYWtib29zdGVyOiAke3RoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3Rlcn1gKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGRlY3JlYXNlU3RyZWFrYm9vc3RlcihkZWNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHRsZXQgbmV3Qm9vc3RlckZha2ZvciA9IHBhcnNlRmxvYXQoKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtIGRlY3JlYXNlVmFsdWUpLnRvRml4ZWQoMSkpXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdCb29zdGVyRmFrZm9yXHJcblx0XHRpZiAobmV3Qm9vc3RlckZha2ZvciA8IDApe1xyXG5cdFx0XHRuZXdCb29zdGVyRmFrZm9yID0gMFxyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3Qm9vc3RlckZha2ZvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IGZhbHNlO1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQ3JCO0FBOEJPLElB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USxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdEQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQ3pEO0FBRU8sU0FBUyxrQkFBa0IsUUFBMkI7QUFDM0QsTUFBSSxRQUFtQixVQUFVLENBQUM7QUFDbEMsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxVQUFVLEtBQUssUUFBUTtBQUN6QixjQUFRO0FBQUEsSUFDVixPQUFPO0FBQ0w7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVPLFNBQVMscUJBQXFCLGFBQTZCO0FBQ2hFLE1BQUksZUFBZTtBQUNuQixhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLGVBQWUsS0FBSyxTQUFTLGdCQUFnQixHQUFHO0FBQ2xELHFCQUFlLEtBQUs7QUFBQSxJQUN0QjtBQUFBLEVBQ0Y7QUFHRixTQUFPO0FBQ1A7OztBQzlJRixJQUFNLDBCQUFvQztBQUFBLEVBQ3pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxrQkFBNEI7QUFBQSxFQUNqQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxF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QSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K From 1b2846749f0e3c59905eb242e972134234dd24a5 Mon Sep 17 00:00:00 2001 From: saertna <83655354+saertna@users.noreply.github.com> Date: Wed, 18 Oct 2023 22:06:15 +0200 Subject: [PATCH 15/15] variables for streakbooster --- main.js | 13 ++++++++----- src/constants.ts | 3 +++ src/main.ts | 14 +++++++++----- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/main.js b/main.js index a2793f0..da5421a 100644 --- a/main.js +++ b/main.js @@ -1717,6 +1717,9 @@ var pointsNoteMajurity = 100; var pointsMajurity = 10; var pointsForDailyChallenge = 500; var pointsForWeeklyChallenge = 2e3; +var streakboosterDecrease = 0.2; +var streakboosterIncreaseDaily = 0.1; +var streakboosterIncreaseWeekly = 1; var avatarInitContent = `# Avatar | | | @@ -2996,7 +2999,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` await this.updateAvatarPage(this.settings.avatarPageName); console.log(`${newDailyNoteCreationTask}/2 Notes created today.`); } else if (newDailyNoteCreationTask == 2) { - this.increaseStreakbooster(0.1); + this.increaseStreakbooster(streakboosterIncreaseDaily); await this.saveSettings(); await this.updateStatusBar(this.statusbarGamification); await this.giveStatusPoints(pointsForDailyChallenge); @@ -3035,7 +3038,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` await this.updateAvatarPage(this.settings.avatarPageName); console.log(`${newWeeklyNoteCreationTask}/7 Notes created in a chain.`); } else if (newWeeklyNoteCreationTask == 7) { - this.increaseStreakbooster(1); + this.increaseStreakbooster(streakboosterIncreaseWeekly); await this.saveSettings(); await this.giveStatusPoints(pointsForWeeklyChallenge); console.log(`Weekly Challenge reached! ${newWeeklyNoteCreationTask}/7 created in a chain.`); @@ -3092,7 +3095,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` return this.updateAvatarPage(this.settings.avatarPageName); } async increaseStreakbooster(increaseValue) { - let newBoosterFakfor = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); + let newBoosterFakfor = parseFloat((this.settings.streakbooster + increaseValue).toFixed(streakboosterIncreaseWeekly)); if (newBoosterFakfor > 80) { newBoosterFakfor = 80; } @@ -3102,7 +3105,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` console.log(`streakbooster: ${this.settings.streakbooster}`); } async decreaseStreakbooster(decreaseValue) { - let newBoosterFakfor = parseFloat((this.settings.streakbooster - decreaseValue).toFixed(1)); + let newBoosterFakfor = parseFloat((this.settings.streakbooster - decreaseValue).toFixed(streakboosterDecrease)); this.settings.streakbooster = newBoosterFakfor; if (newBoosterFakfor < 0) { newBoosterFakfor = 0; @@ -3466,4 +3469,4 @@ function rateDirectionForStatusPoints(ratingCurrent, ratingNew) { } return ratingFaktor; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZVxyXG59IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7XHJcblx0Y3JlYXRlQ2hhcnRGb3JtYXQsXHJcblx0ZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlLFxyXG5cdGdldE1vZGlmaWNhdGlvbkRhdGVzLFxyXG5cdG1vbnRoc0JldHdlZW4sXHJcblx0cmVwbGFjZUNoYXJ0Q29udGVudFxyXG59IGZyb20gJy4vY3JlYXRtb2RjaGFydGNhbGN1bGF0aW9uJ1xyXG5pbXBvcnQge0JhZGdlLCBjaGVja0lmUmVjZWl2ZUFCYWRnZSwgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwsIGdldEJhZGdlRm9yTGV2ZWx9IGZyb20gJy4vYmFkZ2VzJ1xyXG5pbXBvcnQge2dldExldmVsRm9yUG9pbnRzLCBzdGF0dXNQb2ludHNGb3JMZXZlbH0gZnJvbSAnLi9sZXZlbHMnXHJcbmltcG9ydCB0eXBlIHtNb21lbnR9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UsIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlICwgZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyB9IGZyb20gJy4vcmFuZG9tTm90aWZpY2F0aW9uVGV4dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGdhbWlmaWNhdGlvbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gbG9hZGVkIScpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyh0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdC8vIHRha2UgY2FyZSB0byByZXNldCB3aGVuIG9wZW5lZCBvbiBhIG5ldyBkYXksIGRvbid0IHdhaXQgZm9yIHRyaWdnZXJcclxuXHRcdHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvLyBDb2RlIHRoYXQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhZnRlciB0aGUgZGVsYXlcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cclxuXHRcdC8vIHRvIHNldCB0aW1lciBmb3IgcmVzZXQgZGFpbHkgYW5kIHdlZWtseSBnb2Fsc1xyXG5cdFx0dGhpcy50aW1lckludGVydmFsID0gMzAgKiA2MCAqIDEwMDA7IC8vIG1pbnV0ZXMgeCBzZWNvbmRzIHggbWlsbGlzZWNvbmRzXHJcblx0XHR0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZXNldERhaWx5R29hbHMuYmluZCh0aGlzKSwgdGhpcy50aW1lckludGVydmFsKTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJhY2Nlc3NpYmlsaXR5XCIsIFwiY2hhbmdlIHRleHQgZm9ybWF0dGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHBvaW50c1JlY2VpdmVkID0gNTAwO1xyXG5cdFx0XHRcdC8vIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXphdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXFxcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcXFwiLmApLm9wZW4oKTtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHModGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMzAwKVxyXG5cdFx0XHRcdC8vIHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXh0QmFkZ2VMZXZlbCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBOXHUwMEU0Y2hzdGUgQmFkZ2UgbWl0IExldmVsICR7bmV4dEJhZGdlTGV2ZWx9YClcclxuXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IGluaXRCYWRnZSA6IEJhZGdlID0gYXdhaXQgZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGluaXRCYWRnZSk7XHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgLHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gYXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMub3BlbkF2YXRhckZpbGUoKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY2hhbmdlIHRleHQgaW4gc3RhdHVzIGJhclxyXG5cclxuXHRcdFx0XHQvLyB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdFx0Ly9zdGF0dXNiYXJHYW1pZmljYXRpb24uc2V0VGV4dChcIkhhbGxvXCIpXHJcblxyXG5cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5sb2FkU2V0dGluZ3MoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dGhpcy5hZGRSaWJib25JY29uKFwic3Byb3V0XCIsIFwiQ2FsY3VsYXRlIE5vdGUgTWF0dXJpdHlcIiwgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIEluaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3NcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2luaXQtcmF0ZS1nYW1pZmljYXRpb24nLFxyXG5cdFx0XHRcdG5hbWU6ICdJbml0aWFsaXplIGdhbWlmaWNhdGlvbiByYXRpbmdzJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplR2FtZSh0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpe1xyXG5cdFx0XHQvLyBjb21tYW5kIGNyZWF0ZSBhdmF0YXIgcHJvZmlsZSBwYWdlXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdjcmVhdGUtYXZhdGFyLXBhZ2UnLFxyXG5cdFx0XHRcdG5hbWU6ICdjcmVhdGUgcHJvZmlsZSBwYWdlJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gdGhpcy5hcHA7XHJcblx0XHRcdFx0XHRhd2FpdCBjcmVhdGVBdmF0YXJGaWxlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQpIHtcclxuXHRcdFx0Ly8gY29tbWFuZDogcmVzZXQgZ2FtZVxyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAncmVzZXQtZ2FtZScsXHJcblx0XHRcdFx0bmFtZTogJ3Jlc2V0IHRoZSBnYW1lJyxcclxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29tbWFuZDogdXBkYXRlIGNoYXJ0IGluIEF2YXRhciBQYWdlXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VwZGF0ZS1jaGFydC1hdmF0YXJwYWdlJyxcclxuXHRcdFx0bmFtZTogJ3VwZGF0ZSBjaGFydCBvbiBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUNoYXJ0Q29udGVudCh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBjaGFydFN0cmluZylcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiByYXRlIG5vdGUgbWF0dXJpdHlcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncmF0ZS1ub3RlLW1hdHVyaXR5JyxcclxuXHRcdFx0bmFtZTogJ1JhdGUgbm90ZSBtYWp1cml0eScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBjb21tYW5kOiBjaGFuZ2UgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBzeW1ib2xzXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NoYW5nZS1wcm9ncmVzc2l2ZS1mb3JtYXR0aW5nJyxcclxuXHRcdFx0bmFtZTogJ3RvZ2dsZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIGZvcm1hdHRpbmcnLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHJlcGxhY2VGb3JtYXRTdHJpbmdzKHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldEdhbWUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWwgPSAxMDAwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJTdGF0ZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMoMClcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuICAgICAgICBuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEdhbWUgaXMgbm93IHJlc2V0ZWQuIFBsZWFzZSBkZWxldGUgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCIgbWFudWFsbHkuYCkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUdhbWUoc3RhdHVzYmFyR2FtaWZpY2F0aW9uOiBIVE1MU3BhbkVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MuZ2FtaWZpY2F0aW9uU3RhcnREYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkJyk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0YXdhaXQgdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXA6IFRGaWxlW10gPSBhd2FpdCBnZXRGaWxlTWFwKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLnRhZ3NFeGNsdWRlLCB0aGlzLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0Y29uc3QgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIgPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0Y29uc3QgZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBmaWxlQ291bnRNYXAuc2l6ZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lLmJhc2VuYW1lfSBpbiBwYXRoICR7ZmlsZU5hbWUucGF0aH1gKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkgPj0gMSAmJiAndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ2lubGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3I7XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZShgJHtwb2ludHNSZWNlaXZlZCAqIGJvb3N0ZXJGYWN0b3J9IFBvaW50cyByZWNlaXZlZGApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtpbml0QmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0Y29uc29sZS5sb2coYFlvdSBlYXJuZWQgJHtpbml0QmFkZ2UubmFtZX0gLSAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdGF3YWl0IHRoaXMuYm9vc3RlckZvckluaXQoKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYEZpbmFsbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpc3RhdGlvbiFcXG5Db25ncmF0dWxhdGlvbiwgeW91IGVhcm5lZCAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMhXFxuXFxuQ2hlY2sgdGhlIFByb2ZpbGUgUGFnZTogXCIke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB3cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyOiBhbnksIGZpbGVOYW1lUmF0ZTogbnVtYmVyLCByYXRlRmlsZUxlbmd0aDogbnVtYmVyLCBpbmxpbmtDbGFzczogbnVtYmVyLCByYXRlT3V0OiBudW1iZXIsIHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyLCBub3RlTWFqdXJpdHk6IG51bWJlcikge1xyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ29ic2lkaWFuLXBrbS1nYW1pZmljYXRpb24gdW5sb2FkZWQhJyk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZFxyXG5cdFx0aWYgKHRoaXMudGltZXJJZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJJZCk7XHJcblx0XHRcdHRoaXMudGltZXJJZCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cclxuXHRcdGxldCByYXRlRmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgZmlsZUxlbmd0aCA9IDA7XHJcblx0XHRsZXQgcmF0ZVByb2dyZXNzaXZlU3VtID0gMDtcclxuXHJcblx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSB1bmRlZmluZWQgJiYgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmaWxlTGVuZ3RoID0gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGZpbGVDb250ZW50cywgZmlsZU5hbWUpO1xyXG5cdFx0XHRyYXRlRmlsZUxlbmd0aCA9IHJhdGVOb3RlTGVuZ3RoKGZpbGVMZW5ndGgpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZUNvbnRlbnRzIGFuZCBmaWxlTmFtZSBhcmUgbm90IG51bGxcclxuXHRcdFx0aWYgKGZpbGVDb250ZW50cyAhPT0gbnVsbCAmJiBmaWxlTmFtZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyLCB0aGlzLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBub3RlLW1hdHVyaXR5ID49MWApXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCJmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1tYXR1cml0eScgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgcG9pbnRzUmVjZWl2ZWQ6ICR7cG9pbnRzUmVjZWl2ZWR9YClcclxuXHRcdFx0XHRcdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVBvaW50cyA9IGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzUmVjZWl2ZWQgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKVxyXG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXIsIGZpbGVOYW1lUmF0ZSwgcmF0ZUZpbGVMZW5ndGgsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0sIG5vdGVNYWp1cml0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciBvbiB0aGlzIGZpbGUgOiAke2ZpbGUucGF0aH0gJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bmV3IE5vdGljZSgnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnbm90ZSBtYWp1cml0eSB1cGRhdGVkIScpXHJcblx0XHRcdC8vYXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZmlsZSB3YXMgbm90IGZvdW5kIHRvIGNhbGN1bGF0ZSBtYWp1cml0aWVzLiBNYWtlIHN1cmUgb25lIGlzIGFjdGl2ZS4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQpe1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVzZXREYWlseUdvYWxzKCl7XHJcblx0XHRsZXQgcmVzZXQgPSBmYWxzZTtcclxuXHRcdGlmKCFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKCFpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRjb25zdCBkYXlzUGFzc2VkID0gd2luZG93Lm1vbWVudCgpLmRpZmYod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJyksICdkYXlzJykgLSAxOyAvL3RvZGF5IGlzIHN0aWxsIGEgY2hhbmNlLiBcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLmRlY3JlYXNlU3RyZWFrYm9vc3RlcihkYXlzUGFzc2VkKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtkYXlzUGFzc2VkfSBkYXlzIHBhc3NlZGApXHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHRcdGNvbnNvbGUubG9nKGB3ZWVrbHkgQ2hhbGxlbmdlIHJlc2V0ZWRgKVxyXG5cdFx0XHRyZXNldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkgJiYgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChyZXNldCl7XHJcblx0XHRcdC8vdGhpcy5kYWlseUNoYWxsZW5nZVVwZGF0ZVByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgMClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlRGFpbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRsZXQgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gdGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0aWYobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDEpe1xyXG5cdFx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMC4xKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNGb3JEYWlseUNoYWxsZW5nZSlcclxuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgZGFpbHkgQ2hhbGxlbmdlIHJlYWNoZWQhICR7bmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrfS8yIGNyZWF0ZWQuYClcclxuXHRcdFx0XHRuZXcgTm90aWNlKG1lc3NhZ2UpXHJcblx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSlcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBOb3RlcyBjcmVhdGVkIHRvZGF5LmApXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0aWYoaXNPbmVEYXlCZWZvcmUod2luZG93Lm1vbWVudCh0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUsICdERC5NTS5ZWVlZJykpKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAxO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzaztcclxuXHRcdGlmIChjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzIDwgNykge1xyXG5cdFx0XHRjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKys7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0YXdhaXQgdGhpcy5jaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VFdmFsdWF0aW9uKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcikge1xyXG5cdFx0aWYgKG5ld1dlZWtseU5vdGVDcmVhdGlvblRhc2sgPD0gNikge1xyXG5cdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fSBlbHNlIGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrID09IDcpIHtcclxuXHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoMSk7XHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSlcclxuXHRcdFx0Y29uc29sZS5sb2coYFdlZWtseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwO1xyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9fFx1RDgzRFx1REU4MCR7Ym9vc3RlckZhY3Rvcn0ke3RoaXMucmF0ZUJvb3N0ZXJEaXJlY3Rpb24oKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnXHJcblx0XHQvKmNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0XHRpZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwNlx1RkUwRidcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnXHJcblx0XHR9Ki9cclxuXHRcdGlmKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUpe1xyXG5cdFx0XHRkaXJlY3Rpb24gPSAnXHUyQjA2XHVGRTBGJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRpcmVjdGlvblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld0Jvb3N0ZXJGYWtmb3IgPSBwYXJzZUZsb2F0KCh0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyBpbmNyZWFzZVZhbHVlKS50b0ZpeGVkKDEpKTtcclxuXHRcdGlmKG5ld0Jvb3N0ZXJGYWtmb3IgPiA4MCl7XHJcblx0XHRcdG5ld0Jvb3N0ZXJGYWtmb3IgPSA4MDtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld0Jvb3N0ZXJGYWtmb3I7XHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gdHJ1ZTtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdGNvbnNvbGUubG9nKGBzdHJlYWtib29zdGVyOiAke3RoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3Rlcn1gKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGRlY3JlYXNlU3RyZWFrYm9vc3RlcihkZWNyZWFzZVZhbHVlOm51bWJlcil7XHJcblx0XHRsZXQgbmV3Qm9vc3RlckZha2ZvciA9IHBhcnNlRmxvYXQoKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciAtIGRlY3JlYXNlVmFsdWUpLnRvRml4ZWQoMSkpXHJcblx0XHR0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgPSBuZXdCb29zdGVyRmFrZm9yXHJcblx0XHRpZiAobmV3Qm9vc3RlckZha2ZvciA8IDApe1xyXG5cdFx0XHRuZXdCb29zdGVyRmFrZm9yID0gMFxyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3Qm9vc3RlckZha2ZvclxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IGZhbHNlO1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cclxuXHJcblx0YXN5bmMgdXBkYXRlQXZhdGFyUGFnZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1c1BvaW50czogJHt0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c31gKVxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlNDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0NDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJebGV2ZWxBbmRQb2ludHNcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50c1xyXG5cclxuXHRcdGNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMobmV3UG9pbnRzKTtcclxuXHRcdGxldCBuZXh0TGV2ZWxBdCA9IHRoaXMuc2V0dGluZ3MueHBGb3JOZXh0TGV2ZWw7XHJcblx0XHRsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmApXHJcblx0XHRcdC8vIGNoZWNrIGZpcnN0IGlmIHRoaXMgbWVhbnMgYSBuZXcgYmFkZ2UgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW5cclxuXHRcdFx0cmVjZWl2ZUJhZGdlID0gY2hlY2tJZlJlY2VpdmVBQmFkZ2UodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgbGV2ZWwubGV2ZWwpXHJcblx0XHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwgPSBsZXZlbC5sZXZlbDtcclxuXHRcdFx0bmV4dExldmVsQXQgPSBsZXZlbC5wb2ludHNOZXh0O1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb2dyZXNzQmFyRW5kID0gbmV4dExldmVsQXQgLSBuZXdQb2ludHM7XHJcblx0XHRjb25zdCBuZXdQb2ludHNTdHJpbmcgPSAnfCAqKkxldmVsKiogIHwgKionICsgbGV2ZWwubGV2ZWwgKyAnKiogfFxcbnwgUG9pbnRzIHwgJyArIG5ld1BvaW50cyArICcgICAgfFxcbl5sZXZlbEFuZFBvaW50c1xcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcXG4gICAgZGF0YTogWycgKyBuZXdQb2ludHMgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBwcm9ncmVzc0JhckVuZCArICddXFxueE1pbjogJyArIGxldmVsLnBvaW50cyArICdcXG54TWF4OiAnICsgbGV2ZWwucG9pbnRzTmV4dCArICdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnXHJcblx0XHRjb25zdCBkYWlseUNoYWxsZW5nZSA9ICd8ICoqZGFpbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiB8ICoqJyArIHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrICsgJy8yKiogICB8JztcclxuXHRcdGNvbnN0IGRheXNMZWZ0SW5XZWVrbHlDaGFpbiA6IG51bWJlciA9IDcgLSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRjb25zdCB3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpICsgJ0VQKiAgICAgfCAgKionICsgdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIGRheXNMZWZ0SW5XZWVrbHlDaGFpbiArICddXFxueE1pbjogMFxcbnhNYXg6IDdcXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogNDAlXFxubGFiZWxDb2xvcnM6IGZhbHNlXFxuZmlsbDogZmFsc2VcXG5iZWdpbkF0WmVybzogZmFsc2VcXG5iZXN0Rml0OiBmYWxzZVxcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXFxuYmVzdEZpdE51bWJlcjogMFxcbnN0YWNrZWQ6IHRydWVcXG5pbmRleEF4aXM6IHlcXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxcbmxlZ2VuZDogZmFsc2VcXG5gYGAnO1xyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9ICd8ICoqYm9vc3RlciBmYWN0b3IqKiB8ICoqJyArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciArICcqKiB8J1xyXG5cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwgJiYgcmVmZXJlbmNlMyAhPSBudWxsICYmIHJlZmVyZW5jZTQgIT0gbnVsbCl7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjQ7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRzdGFydDMgPSByZWZlcmVuY2UzIC0gMSAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kMyA9IHJlZmVyZW5jZTMgKyAyNCAtMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQ0ID0gcmVmZXJlbmNlNCAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRlbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3Ynkgb2Zmc2V0IDU1IGlzIG5lZWRlZFxyXG5cdFx0XHRcclxuXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3UG9pbnRzU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIGRhaWx5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMyA9IFsuLi5uZXdMaW5lczIuc2xpY2UoMCwgc3RhcnQzKSwgd2Vla2x5Q2hhbGxlbmdlLCAuLi5uZXdMaW5lczIuc2xpY2UoZW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIHN0YXJ0NCksIGJvb3N0ZXJGYWN0b3IsIC4uLm5ld0xpbmVzMy5zbGljZShlbmQ0KV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXM0LmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlY2VpdmVCYWRnZVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGdpdmVCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gYmFkZ2UubGV2ZWwgKyBcIjogKlwiICsgYmFkZ2UubmFtZSArIFwiKlwiKXtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMTtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0ZW5kMiA9IHJlZmVyZW5jZTIgKyAyO1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKiogXCIgKyBiYWRnZS5sZXZlbCArIFwiXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczIgPSBbLi4ubmV3TGluZXMuc2xpY2UoMCwgc3RhcnQyKSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildXHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMyLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVJbml0QmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgKXtcclxuXHRcdFx0ZW5kID0gcmVmZXJlbmNlICsgMjtcclxuXHRcdFx0c3RhcnQgPSByZWZlcmVuY2UgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIGNyZWF0ZUNoYXJ0KHZhdWx0OiBWYXVsdCk6IFByb21pc2U8c3RyaW5nPntcclxuXHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0Y29uc3QgZWFybGllc3RGaWxlID0gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzKVxyXG5cdFx0Ly9sZXQgZWFybGllc3REYXRlID0gZWFybGllc3RGaWxlLnN0YXQuY3RpbWVcclxuXHRcdC8vaWYgKGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RGaWxlLnN0YXQuY3RpbWUgKXtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblx0XHQvL31cclxuXHJcblx0XHRsZXQgbW9udGhDb3VudGVyID0gMCAvL2Zvcm1hdChuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCAnTU0nKTtcclxuXHRcdGxldCBkYXRlQ291bnQgPSBuZXcgRGF0ZShlYXJsaWVzdERhdGUpOyAvLyB1bSBlcyBob2Noelx1MDBFNGhsZW4genUga1x1MDBGNm5uZW5cclxuXHRcdC8vY29uc3QgZmlsZURhdGVNb250aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cdFx0Ly8gY3JlYXRlIEJhc2UgZm9yIGNvdW50aW5nIGNyZWF0ZWRcclxuXHRcdC8qd2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fSovXHJcblxyXG5cdFx0bW9udGhDb3VudGVyID0gMFxyXG5cdFx0ZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBtb2RpZmllZFxyXG5cdFx0d2hpbGUgKG1vbnRoQ291bnRlciA8IG1vbnRoY291bnQpe1xyXG5cdFx0XHRkYXRlU3RyaW5nID0gZGF0ZUNvdW50LmdldE1vbnRoKCkrMSArIFwiLlwiICsgZGF0ZUNvdW50LmdldEZ1bGxZZWFyKClcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZGF0ZVN0cmluZzogJHtkYXRlU3RyaW5nfWApXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Lypjb25zdCBjcmVhdGlvbkRhdGVzID0gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRpb25EYXRlcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdC8vZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwLmdldChmb3JtYXQoY3JlYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKTtcclxuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAoY3VycmVudENvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIG1hcCwgaW5pdGlhbGl6ZSBpdCB3aXRoIGEgY291bnQgb2YgMVxyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdHRlZERhdGUsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9Ki9cclxuXHJcblx0XHQvLyBjb3VudCBob3cgbWFueSBtb2QgZmlsZXMgaW4gZWFjaCBtb250aFxyXG5cdFx0Y29uc3QgbW9kaWZpY2F0aW9uRGF0ZXMgPSBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlcylcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpLGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpKSsxKVxyXG5cdFx0XHRjb25zdCBmb3JtYXR0ZWREYXRlID0gZm9ybWF0KG1vZGlmaWNhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXBNb2QuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBjcmVhdGVkXHJcblx0XHQvKmxldCBjaGFyU3RyaW5nQ3JlYXRlZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwKSB7XHJcblx0XHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ0NyZWF0ZWQgPSBjaGFyU3RyaW5nQ3JlYXRlZC5zbGljZSgwLGNoYXJTdHJpbmdDcmVhdGVkLmxlbmd0aC0yKSovXHJcblxyXG5cdFx0Ly8gYnVpbGQgQ2hhcnQgU3RyaW5nIG1vZGlmaWVkXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsOiBQcm9taXNlPGJvb2xlYW4+KXtcclxuXHRcdG5ld0xldmVsLnRoZW4oKHJlc3VsdDogYm9vbGVhbik9PiB7XHJcblx0XHRcdGlmKHJlc3VsdCl7XHJcblx0XHRcdFx0Y29uc3QgYmFkZ2UgOiBCYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGBiYWRnZSBmb3IgbGV2ZWwgJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSBpcyAke2JhZGdlLm5hbWV9IC0gJHtiYWRnZS5sZXZlbH1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGJhZGdlKVxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRcdFx0dGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVLZXlzRnJvbUZyb250bWF0dGVyKCkge1xyXG5cdFx0Ly9jb25zdCB7IFZhdWx0LCBURmlsZSB9ID0gd2luZG93LmFwcDtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHQvL2NvbnN0IHZhdWx0ID0gVmF1bHQucmVvcGVuKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBNYXJrZG93biBmaWxlcyBpbiB0aGUgdmF1bHRcclxuXHRcdC8vY29uc3QgbWFya2Rvd25GaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcCA9IGF3YWl0IGdldEZpbGVDb3VudE1hcCh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy50YWdzRXhjbHVkZSwgdGhpcy5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKTtcclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwLmtleXMoKSkge1xyXG5cdFx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5maW5kKGZpbGUgPT4gZmlsZS5iYXNlbmFtZSA9PT0gZmlsZU5hbWUpO1xyXG5cdFx0XHRpZiAoIWZpbGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0gbm90IGZvdW5kLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgJHtlLm1lc3NhZ2V9YDtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoZXJyb3JNZXNzYWdlLCA0MDAwKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gbmV3IE5vdGljZShgUmVtb3ZlZCBzcGVjaWZpZWQga2V5cyBmcm9tIGZyb250bWF0dGVyIGZyb20gZmlsZSBcXFwiJHtmaWxlTmFtZX1cXFwiLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgd2hpY2hMZXZlbE5leHRCYWRnZShjdXJyZW50TGV2ZWw6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPntcclxuXHRcdGxldCBuZXh0QmFkZ2VMZXZlbCA9IDBcclxuXHRcdGZvciAobGV0IGkgPSBjdXJyZW50TGV2ZWw7IGkgPCAxMTA7IGkrKyl7XHJcblx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGksIHRydWUpXHJcblx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdGNvbnN0IGxldmVsUmVnZXggPSAvbGV2ZWwgKFxcZCspLztcclxuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBiYWRnZS5sZXZlbC5tYXRjaChsZXZlbFJlZ2V4KTtcclxuXHRcdFx0aWYobWF0Y2gpe1xyXG5cdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGN1cnJlbnRMZXZlbCAmJiBuZXh0QmFkZ2VMZXZlbCA9PSAwICkge1xyXG5cdFx0XHRcdFx0bmV4dEJhZGdlTGV2ZWwgPSBsZXZlbE51bWJlcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0QmFkZ2VMZXZlbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgYm9vc3RlckZvckluaXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHRcdGNvbnN0IG5leHRCYWRnZUF0ID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRjb25zdCBzdGF0dXNQb2ludHNUb1JlYWNoID0gc3RhdHVzUG9pbnRzRm9yTGV2ZWwobmV4dEJhZGdlQXQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdGF0dXNQb2ludHNUb1JlYWNoIGZvciBuZXh0IEJhZGdlOiAke3N0YXR1c1BvaW50c1RvUmVhY2h9YClcclxuXHRcdC8vIDUwIE5vdGVzIGZyb20gTGV2ZWwgMSB0byA1IHRvIGdldCB0aGUgZmlyc3QgYmFkZ2UuXHJcblx0XHQvLyAzMDAgUG9pbnRzIGluIGF2ZXJhZ2UgZm9yIGEgTm90ZS5cclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSBNYXRoLnJvdW5kKChzdGF0dXNQb2ludHNUb1JlYWNoIC0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHMpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IGJvb3N0ZXJGYWN0b3JcclxuXHRcdHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUgPSB0cnVlXHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyRmFrdG9yOiAke2Jvb3N0ZXJGYWN0b3J9YClcclxuXHRcdHJldHVybiBib29zdGVyRmFjdG9yXHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUpe1xyXG5cdFx0XHRjb25zdCBzb3VyY2VQYXRoID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKT8ucGF0aCB8fCAnJztcclxuXHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQoZXhpc3RpbmdGaWxlLnBhdGgsIHNvdXJjZVBhdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGaWxlIG5vdCBmb3VuZCBvciB1bmFibGUgdG8gb3Blbi5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09uZURheUJlZm9yZShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0cmV0dXJuIGlucHV0RGF0ZS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBdmF0YXJGaWxlKGFwcDogQXBwLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0Ly9zZXR0aW5nczogR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3M7XHJcblx0Ly8gRGVmaW5lIHRoZSBmaWxlIG5hbWUgYW5kIGNvbnRlbnRcclxuXHQvL2NvbnN0IGZpbGVOYW1lID0gJ0F2YXRhciAtIEdhbWlmaWNhdGlvbic7IC8vIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWU7XHJcblx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWU6ICR7ZmlsZU5hbWV9YClcclxuXHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHtmaWxlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7ZmlsZU5hbWV9Lm1kIGFscmVhZHkgZXhpc3RzYCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdC8vIENyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgdmF1bHRcclxuXHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlKGAke2ZpbGVOYW1lfS5tZGAsIGF2YXRhckluaXRDb250ZW50KTtcclxuXHJcbn1cclxuXHJcblxyXG5jbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFBhcnRpYWw8SVNldHRpbmdzPiA9IHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXG4gIGJpbmRFbnRlcjogdHJ1ZSxcbiAgYmluZFRhYjogdHJ1ZSxcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxuICB0YWdzRXhjbHVkZTogJycsXG4gIGZvbGRlckV4Y2x1ZGU6ICdFeGNhbGlkcmF3JyxcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiAnKionLFxuICBudW1BbGxGaWxlczogMSxcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogMCxcbiAgc3RhdHVzUG9pbnRzOiAwLFxuICBzdGF0dXNMZXZlbDogMSxcbiAgeHBGb3JOZXh0TGV2ZWw6IDEwMDAsXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogJzEyLjA4LjIwMjMnLFxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogMSxcbiAgZGVidWc6IGZhbHNlLFxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXG4gIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogJzEyLjA4LjIwMjMnLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiAwLFxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXG4gIHN0cmVha2Jvb3N0ZXI6IDAsXG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldHRpbmdzIHtcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XG4gIGJpbmRFbnRlcjogYm9vbGVhbjtcbiAgYmluZFRhYjogYm9vbGVhbjtcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcbiAgdGFnc0V4Y2x1ZGU6IHN0cmluZztcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xuICBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xuICBudW1BbGxGaWxlczogbnVtYmVyO1xuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XG4gIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcjtcbiAgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XG4gIHhwRm9yTmV4dExldmVsOiBudW1iZXI7XG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBudW1iZXI7XG4gIGRlYnVnOiBib29sZWFuO1xuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XG4gIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xuICBzdHJlYWtib29zdGVyOiBudW1iZXI7XG4gIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogZ2FtaWZpY2F0aW9uO1xuICBcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xuICBwdWJsaWMgYmluZEVudGVyOiBib29sZWFuO1xuICBwdWJsaWMgYmluZFRhYjogYm9vbGVhbjtcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0YWdzRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcbiAgcHVibGljIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XG4gIHB1YmxpYyBudW1BbGxGaWxlczogbnVtYmVyO1xuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBudW1iZXI7XG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xuICBwdWJsaWMgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcbiAgcHVibGljIGRlYnVnOiBib29sZWFuO1xuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXJEYXRlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xuXHQgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuICBcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XG5cdFx0Y29uc3QgY29mZmVlTGluayA9IGNvZmZlZURpdi5jcmVhdGVFbChcImFcIiwge1xuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcblx0XHR9KTtcblx0XHRjb25zdCBjb2ZmZWVJbWcgPSBjb2ZmZWVMaW5rLmNyZWF0ZUVsKFwiaW1nXCIsIHtcblx0XHRhdHRyOiB7XG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXG5cdFx0fSxcblx0XHR9KTtcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XG5cblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xuICBcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2Jylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdFxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiBcblx0XHRcdFx0dG9nZ2xlXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZClcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICBcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdsaW1pdCB0aGUgdmlzaWJsZSBtb250aCBpbiB0aGUgY2hhcnQgb24geW91ciBhdmF0YXIgcGFnZTogJyArIHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKVxuXHRcdFx0LnNldERlc2MoJ2lmIDAsIGFsbCBtb250aCB3aWxsIGJlIHNob3duLiBFbnRlciBhIG51bWJlciBob3cgbWFueSBtb250aCBzaGFsbCBiZSBzaG93bi4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdOdW1iZXIgb2YgTW9udGggdG8gc2hvdycpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUudG9TdHJpbmcoKSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuICBcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMylcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHR9KSk7XG5cblx0fVxuICB9IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiZXhwb3J0IGNvbnN0IHBvaW50c05vdGVNYWp1cml0eSA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5ID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSA9IDUwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgIHwgICAgIHxcclxufCAtLS0tLS0gfCAtLS0gfFxyXG58IExldmVsICB8IDAgICAgfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcdFxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcclxufCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG58ICAgICAgICAgICAgIHwgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tIHwgLS0tIHwgLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxufCAgfCAgICAgfHxcclxufCAtLS0tIHwgLS0tIHwgLS0tIHxcclxufCAqKndlZWtseSBOb3RlcyoqIHwgKjIwMDBFUCogICAgIHwgICoqMC83KiogICB8XHJcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbTm90ZXNdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIGRvbmUgaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFs3XVxyXG54TWluOiAwXHJcbnhNYXg6IDdcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJkYXlzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogWzAsIDAsIDBdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBtb2RpZmllZFxyXG4gICAgZGF0YTogWzAsIDAsIDBdXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogODAgJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG55VGl0bGU6IFwiTnVtYmVyIG9mIE5vdGVzXCJcclxueFRpdGxlOiBcIk1vbnRoc1wiXHJcbnhNaW46IDBcclxuXFxgXFxgXFxgXHJcbl5DaGFydE1vbnRoXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImltcG9ydCB7VEZpbGV9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RDcmVhdGVkRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBlYXJsaWVzdENyZWF0ZWRGaWxlO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0TW9kaWZpZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdE1vZGlmaWVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQubXRpbWUgPCBlYXJsaWVzdE1vZGlmaWVkRmlsZS5zdGF0Lm10aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0TW9kaWZpZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0TW9kaWZpZWRGaWxlO1xyXG59ICBcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEVhcmxpZXN0RGF0ZUZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0Q3JlYXRlZEZpbGU6IFRGaWxlID0gZmlsZXNbMF07XHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRpZiAoZmlsZS5zdGF0LmN0aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9udGhzQmV0d2VlbihzdGFydE1vbnRoOiBEYXRlLCBlbmRNb250aDogRGF0ZSk6IG51bWJlciB7XHJcblx0bGV0IG1vbnRocyA9IChlbmRNb250aC5nZXRNb250aCgpIC0gc3RhcnRNb250aC5nZXRNb250aCgpKSArIDE7XHJcblx0aWYgKGVuZE1vbnRoLmdldEZ1bGxZZWFyKCkgPiBzdGFydE1vbnRoLmdldEZ1bGxZZWFyKCkpIHtcclxuXHRcdG1vbnRocyArPSAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSAtIHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkqMTI7XHJcblx0fVxyXG5cdHJldHVybiBtb250aHM7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5jdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlcyhmaWxlczogVEZpbGVbXSk6IEFycmF5PERhdGU+IHtcclxuXHRjb25zdCBjcmVhdGlvbkRhdGVzOiBBcnJheTxEYXRlPiA9IFtdO1xyXG4gIFxyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0Y3JlYXRpb25EYXRlcy5wdXNoKG5ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkpO1xyXG5cdH1cclxuICBcclxuXHRyZXR1cm4gY3JlYXRpb25EYXRlcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydEZvcm1hdCh5X2F4aXM6IHN0cmluZywgY291bnRzU3RyaW5nTW9kOiBzdHJpbmcsIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBudWxsXHJcblx0aWYgKGNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPT0gMCl7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gMFxyXG5cdH0gZWxzZSB7XHJcblx0XHRtb25hdHNiZWdyZW56dW5nID0gY291bnRzU3RyaW5nTW9kLnNwbGl0KCcsJykubGVuZ3RoIC0gY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdH1cclxuXHRcclxuXHQvL2NvbnN0IG1vbmF0c2JlZ3Jlbnp1bmcgPSBsZW5ndGhjb3VudHNTdHJpbmdDcmVhdGUgLSB0aGlzLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGVcclxuXHRyZXR1cm4gXCJgYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW1wiICsgeV9heGlzICsgXCJdXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogbW9kaWZpZWRcXG4gICAgZGF0YTogW1wiICsgY291bnRzU3RyaW5nTW9kICsgXCJdXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDgwICVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbnlUaXRsZTogXFxcIk51bWJlciBvZiBOb3Rlc1xcXCJcXG54VGl0bGU6IFxcXCJNb250aHNcXFwiXFxueE1pbjogXCIgKyBtb25hdHNiZWdyZW56dW5nICsgXCJcXG5gYGBcIjtcclxufVxyXG5cclxuICBcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDaGFydENvbnRlbnQgKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIG5ld0NvbnRlbnQ6IHN0cmluZykge1xyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdGlmIChsaW5lID09PSBcIl5DaGFydE1vbnRoXCIpIHtcclxuXHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHJlZmVyZW5jZSAhPSBudWxsKXtcclxuXHRcdGVuZCA9IHJlZmVyZW5jZTtcclxuXHRcdHN0YXJ0ID0gcmVmZXJlbmNlIC0gMTk7XHJcblx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld0NvbnRlbnQsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgbGV2ZWw6IHN0cmluZztcclxuICB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlJlY2VpdmVBQmFkZ2UobGV2ZWxPbGQ6IG51bWJlciwgbGV2ZWxOZXc6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICBsZXQgcmVjZWl2ZUJhZGdlID0gZmFsc2VcclxuICBmb3IgKGxldCBpPTA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKyl7XHJcbiAgICBpZiAobGV2ZWxPbGQgPCBiYWRnZUxldmVsc1tpXSAmJiBsZXZlbE5ldyA+PSBiYWRnZUxldmVsc1tpXSl7XHJcbiAgICAgIHJlY2VpdmVCYWRnZSA9IHRydWVcclxuICAgIH0gXHJcbiAgfVxyXG4gIHJldHVybiByZWNlaXZlQmFkZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlciwgaW5mb3JtOiBib29sZWFuKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIsIGxldmVsOiBcImxldmVsIDVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgLCBsZXZlbDogXCJsZXZlbCAxMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiAsIGxldmVsOiBcImxldmVsIDIwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgLCBsZXZlbDogXCJsZXZlbCAyN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNlIE93bCBHdXJ1XCIsIGRlc2NyaXB0aW9uOiBcIldob28taG9vISBZb3UndmUgYWNoaWV2ZWQgJ1dpc2UgT3dsIEd1cnUnIHN0YXR1cy4gWW91ciB3aXNkb20gaXMgbGVnZW5kYXJ5LCBhbmQgeW91ciBob290cyBvZiBrbm93bGVkZ2UgZWNobyB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgaWdub3JhbmNlIVwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRWluc3RlaW4gSW5jYXJuYXRlXCIsIGRlc2NyaXB0aW9uOiBcIkV1cmVrYSEgWW91J3ZlIGJlY29tZSBhbiAnRWluc3RlaW4gSW5jYXJuYXRlLCcgcHVzaGluZyB0aGUgYm91bmRhcmllcyBvZiB1bmRlcnN0YW5kaW5nIGFuZCBiZW5kaW5nIHRoZSBmYWJyaWMgb2Yga25vd2xlZGdlIHRvIHlvdXIgd2lsbCFcIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk1hc3Rlcm1pbmQgU2FnZVwiLCBkZXNjcmlwdGlvbjogXCJNYWduaWZpY2VudCEgWW91J3ZlIGFzY2VuZGVkIHRvIHRoZSByYW5rIG9mICdNYXN0ZXJtaW5kIFNhZ2UsJyBndWlkaW5nIHRoZSByaXZlcnMgb2YgaW5mb3JtYXRpb24gYW5kIGVubGlnaHRlbmluZyBhbGwgd2hvIHNlZWsgd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2VyZWJyYWwgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJCcmF2aXNzaW1vISBZb3UncmUgbm93IGEgJ0NlcmVicmFsIE1hZXN0cm8sJyBjb25kdWN0aW5nIHRoZSBzeW1waG9ueSBvZiBrbm93bGVkZ2Ugd2l0aCB0aGUgZmluZXNzZSBvZiBhIHZpcnR1b3NvIGNvbmR1Y3RvciFcIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlplbiBLbm93bGVkZ2UgS2VlcGVyXCIsIGRlc2NyaXB0aW9uOiBcIlNlcmVuaXR5IGFjaGlldmVkISBBcyBhICdaZW4gS25vd2xlZGdlIEtlZXBlciwnIHlvdSBtYWludGFpbiBhIHRyYW5xdWlsIG1pbmQgd2hpbGUgbWFuYWdpbmcgdmFzdCBwb29scyBvZiBrbm93bGVkZ2Ugd2l0aCBncmFjZSBhbmQgcG9pc2UuXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmRcIiwgZGVzY3JpcHRpb246IFwiQWxsIGhhaWwgdGhlICdHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQhJyBZb3Ugd2llbGQgdGhlIGtub3dsZWRnZSBvZiBhZ2VzIGFuZCBob2xkIHRoZSBrZXlzIHRvIHVubG9jayB0aGUgZ2F0ZXMgb2Ygd2lzZG9tIVwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmdcIiwgZGVzY3JpcHRpb246IFwiQ29uZ3JhdHVsYXRpb25zLCBvaCB3aXNlIG9uZSEgWW91J3ZlIGF0dGFpbmVkIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVubGlnaHRlbm1lbnQgYXMgdGhlICdPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZy4nIFlvdXIgdW5kZXJzdGFuZGluZyBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIHdpc2RvbSBpcyBhcyB2YXN0IGFzIHRoZSBjb3Ntb3MgaXRzZWxmIVwiLCBsZXZlbDogXCJsZXZlbCAxMDBcIiAgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzW2luZGV4XVxyXG4gIH1cclxuICBcclxuXHJcblxyXG4gIGV4cG9ydCAgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFswLCAzLCA3LCAxNSwgMjMsIDMwLCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXNJbml0OiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBTZWVrZXIgSW5pdGlhdGVcIiwgZGVzY3JpcHRpb246IFwiV2VsY29tZSB0byB0aGUgam91cm5leSBvZiBrbm93bGVkZ2UhIEFzIGEgJ0xvcmUgU2Vla2VyIEluaXRpYXRlLCcgeW91J3ZlIHRha2VuIHlvdXIgZmlyc3Qgc3RlcHMgaW50byB0aGUgd29ybGQgb2Ygb3JnYW5pemVkIHdpc2RvbS4gWW91ciBxdWVzdCBoYXMganVzdCBiZWd1biwgYW5kIHdpdGggZWFjaCBub3RlIHlvdSBtYWtlLCB5b3UgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBhIGZ1dHVyZSByaWNoIHdpdGggaW5zaWdodHMgYW5kIHVuZGVyc3RhbmRpbmcuIFlvdXIgam91cm5leSBzdGFydHMgaGVyZSwgYW5kIHRoZSBwYXRoIGFoZWFkIGlzIGZpbGxlZCB3aXRoIHBvdGVudGlhbCBhbmQgZGlzY292ZXJ5LlwiLCBsZXZlbDogXCJsZXZlbCAxXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgQXBwcmVudGljZVwiLCBkZXNjcmlwdGlvbjogXCJZb3UndmUgaGl0IHRoZSBncm91bmQgcnVubmluZyB3aXRoIHlvdXIgZXhpc3Rpbmcga25vd2xlZGdlIHRyZWFzdXJlcyEgWW91J3JlIGFscmVhZHkgYW4gJ0xvcmUgQXBwcmVudGljZSwnIGFybWVkIHdpdGggYSB3ZWFsdGggb2Ygd2lzZG9tIGFuZCByZWFkeSB0byBzaGFwZSBpdCBmdXJ0aGVyLlwiLCBsZXZlbDogXCJsZXZlbCAzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhdnZ5IFNjaG9sYXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIGdpdmVuIHlvdSBhIGhlYWQgc3RhcnQhIFlvdSdyZSBub3cgYSAnU2F2dnkgU2Nob2xhciwnIGNvbmZpZGVudGx5IGRpdmluZyBpbnRvIHRoZSBzZWEgb2YgaW5mb3JtYXRpb24gd2l0aCBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluc2lnaHRzLlwiICwgbGV2ZWw6IFwibGV2ZWwgN1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYWdlJ3MgRm91bmRhdGlvblwiLCBkZXNjcmlwdGlvbjogXCJCdWlsZGluZyB1cG9uIHlvdXIgcHJlLWV4aXN0aW5nIG5vdGVzLCB5b3UncmUgZXN0YWJsaXNoaW5nIHRoZSAnU2FnZSdzIEZvdW5kYXRpb24nIGZvciBhbiBldmVuIGdyYW5kZXIgZWRpZmljZSBvZiBrbm93bGVkZ2UuIFlvdXIgZ3JvdW5kd29yayBpcyBpbXByZXNzaXZlIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZG9tIFNlZWRsaW5nXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBudXJ0dXJlZCB0aGUgZ3Jvd3RoIG9mIGEgJ1dpc2RvbSBTZWVkbGluZy4nIFlvdSdyZSBjdWx0aXZhdGluZyB5b3VyIGdhcmRlbiBvZiBrbm93bGVkZ2Ugd2l0aCBjYXJlIGFuZCBwYXRpZW5jZS5cIiAsIGxldmVsOiBcImxldmVsIDIzXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlByb2RpZ2lvdXMgUHJlcGFyZXJcIiwgZGVzY3JpcHRpb246IFwiVGhhbmtzIHRvIHlvdXIgcHJpb3IgZWZmb3J0cywgeW91J3JlIGEgJ1Byb2RpZ2lvdXMgUHJlcGFyZXIsJyBzdGFuZGluZyB0YWxsIGFtb25nIHlvdXIgbm90ZXMgYW5kIHJlYWR5IHRvIGNvbnF1ZXIgbmV3IHJlYWxtcyBvZiB1bmRlcnN0YW5kaW5nLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXBpYyBFcGlwaGFueSBFeHBsb3JlclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIHBhc3Qgbm90ZXMgaGF2ZSBsZWQgeW91IHRvIHRoZSBncmFuZCAnRXBpYyBFcGlwaGFueSBFeHBsb3Jlcicgc3RhdHVzISBZb3UndmUgYWxyZWFkeSBiZWVuIGRvd24gYSBmZXcgcmFiYml0IGhvbGVzIGFuZCBjb21lIG91dCB3aXRoIGRhenpsaW5nIGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBMdW1pbmFyeVwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaWxsdW1pbmF0aW5nIHlvdXIgcGF0aCwgeW91J3ZlIGJlY29tZSBhICdMb3JlIEx1bWluYXJ5LCcgc2hpbmluZyBsaWdodCBvbiB0aGUgbXlzdGVyaWVzIG9mIHRoZSB1bml2ZXJzZSwgb25lIGlkZWEgYXQgYSB0aW1lLlwiICwgbGV2ZWw6IFwibGV2ZWwgNDJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2NyaWJlIG9mIHRoZSBBbmNpZW50c1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIG1hc3Rlcnkgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgaGFzIGVsZXZhdGVkIHlvdSB0byB0aGUgZXN0ZWVtZWQgcmFuayBvZiB0aGUgJ1NjcmliZSBvZiB0aGUgQW5jaWVudHMuJyBZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgdHJhbnNmb3JtZWQgaW50byB0cmVhc3VyZXMsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiBvbGQgd2lzZG9tIGFuZCBuZXcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdXJla2EgTWFlc3Ryb1wiLCBkZXNjcmlwdGlvbjogXCJBcm1lZCB3aXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSB0aGUgJ0V1cmVrYSBNYWVzdHJvLCcgY29tcG9zaW5nIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWVsb2R5IG9mIGRpc2NvdmVyeS5cIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNocm9uaWNsZXMgQ2hhbXBpb25cIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIHN0YW5kaW5nIGFzIGEgdGVzdGFtZW50LCB5b3UndmUgYXNjZW5kZWQgdG8gdGhlIGlsbHVzdHJpb3VzICdDaHJvbmljbGVzIENoYW1waW9uJyBsZXZlbC4gWW91ciBqb3VybmV5IHRocm91Z2ggdGltZSdzIHRhcGVzdHJ5IGhhcyBicm91Z2h0IGZvcnRoIGEgc3ltcGhvbnkgb2YgaW5zaWdodHMgdGhhdCBoYXJtb25pemUgcGFzdCBhbmQgcHJlc2VudC5cIiAsIGxldmVsOiBcImxldmVsIDc1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlRoZSBDdXJpb3VzIENhcnRvZ3JhcGhlclwiLCBkZXNjcmlwdGlvbjogXCJBcyAnVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyLCcgeW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hcHBlZCBvdXQgdW5jaGFydGVkIHRlcnJpdG9yaWVzIG9mIHVuZGVyc3RhbmRpbmcuIFlvdXIgY3VyaW9zaXR5IGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgbm90ZXMgYXJlIHRoZSBjb21wYXNzIGd1aWRpbmcgeW91ciBleHBsb3JhdGlvbi5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlN1bHRhbiBvZiBTeW50aGVzaXNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG1hZGUgeW91IHRoZSAnU3VsdGFuIG9mIFN5bnRoZXNpcy4nIFlvdSdyZSB0aGUgbWFzdGVyIHdlYXZlciwgdGhyZWFkaW5nIHRvZ2V0aGVyIHRocmVhZHMgb2YgaW5mb3JtYXRpb24gaW50byBhIHJpY2ggdGFwZXN0cnkgb2YgaW5zaWdodC5cIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV0ZXJuYWwgQXJjaGl2aXN0XCIsIGRlc2NyaXB0aW9uOiBcIkF0IHRoZSBwaW5uYWNsZSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFzdGVyeSwgeW91J3JlIG5vdyByZXZlcmVkIGFzIHRoZSAnRXRlcm5hbCBBcmNoaXZpc3QuJyBZb3VyIGV4aXN0aW5nIG5vdGVzLCBjYXJlZnVsbHkgY3VyYXRlZCBhbmQgbnVydHVyZWQsIHN0YW5kIGFzIGltbW9ydGFsIGJlYWNvbnMsIGd1aWRpbmcgc2Vla2VycyB0aHJvdWdoIHRoZSBsYWJ5cmludGggb2Yga25vd2xlZGdlIGFjcm9zcyBhZ2VzLlwiICwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgfSxcclxuICAgIF07XHJcbiAgXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWRnZUxldmVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGV2ZWwgPj0gYmFkZ2VMZXZlbHNbaV0pIHtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYWRnZU5hbWVzSW5pdFtpbmRleF1cclxuICB9XHJcblxyXG5cclxuICAvLyBFeGFtcGxlIHVzYWdlOlxyXG4gIC8vIGNvbnN0IGN1cnJlbnRMZXZlbCA9IDQyOyAvLyBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIHBsYXllcidzIGxldmVsXHJcbiAgLy8gY29uc3QgYmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKGN1cnJlbnRMZXZlbCk7XHJcbiAgLy8gY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHJlYWNoZWQgTGV2ZWwgJHtjdXJyZW50TGV2ZWx9LiBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKTtcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiAgICAvKlxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgfSxcclxuICAgICAgLy8gQWRkIG1vcmUgYmFkZ2VzIGhlcmUgZm9yIGxldmVscyA1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgYW5kIDEwMFxyXG4gICAgICAvLyBFeGFtcGxlOlxyXG4gICAgICAvLyB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiB9LFxyXG4gICAgICAvLyB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiIH0sXHJcbiAgICAgIC8vIC4uLmFuZCBzbyBvblxyXG4gICAgXTtcclxuICBcclxuICAgIGNvbnN0IG1heExldmVsID0xMDA7IC8vIEFzc3VtaW5nIGVhY2ggYmFkZ2UgaXMgYXdhcmRlZCBldmVyeSA1IGxldmVsc1xyXG4gICAgY29uc3QgY2FwcGVkTGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgbWF4TGV2ZWwpO1xyXG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKGNhcHBlZExldmVsIC8gNSkgLSAxO1xyXG4gICAgcmV0dXJuIGJhZGdlc1tpbmRleF07XHJcbiAgfVxyXG4gIFxyXG5cclxuICBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9XHJcbiAgKi9cclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxEYXRhIHtcclxuICAgIHBvaW50czogbnVtYmVyO1xyXG4gICAgbGV2ZWw6IG51bWJlcjtcclxuICAgIHBvaW50c05leHQ6IG51bWJlcjtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgbGV2ZWxEYXRhOiBMZXZlbERhdGFbXSA9IFtcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMCwgcG9pbnRzTmV4dDogMH0sXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDEsIHBvaW50c05leHQ6IDEwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAwLCBsZXZlbDogMiwgcG9pbnRzTmV4dDogMzAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAsIGxldmVsOiAzLCBwb2ludHNOZXh0OiA3NTAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMCwgbGV2ZWw6IDQsIHBvaW50c05leHQ6IDE1MDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUwMDAsIGxldmVsOiA1LCBwb2ludHNOZXh0OiAzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwLCBsZXZlbDogNiwgcG9pbnRzTmV4dDogNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDAwMCwgbGV2ZWw6IDcsIHBvaW50c05leHQ6IDgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODAwMDAsIGxldmVsOiA4LCBwb2ludHNOZXh0OiAxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjAwMDAsIGxldmVsOiA5LCBwb2ludHNOZXh0OiAxNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzAwMDAsIGxldmVsOiAxMCwgcG9pbnRzTmV4dDogMjMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMwMDAwLCBsZXZlbDogMTEsIHBvaW50c05leHQ6IDMwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMCwgbGV2ZWw6IDEyLCBwb2ludHNOZXh0OiAzODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODAwMDAsIGxldmVsOiAxMywgcG9pbnRzTmV4dDogNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDcwMDAwLCBsZXZlbDogMTQsIHBvaW50c05leHQ6IDYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwMDAwMCwgbGV2ZWw6IDE1LCBwb2ludHNOZXh0OiA3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwMDAsIGxldmVsOiAxNiwgcG9pbnRzTmV4dDogOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIwMDAwLCBsZXZlbDogMTcsIHBvaW50c05leHQ6IDExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTEwMDAwLCBsZXZlbDogMTgsIHBvaW50c05leHQ6IDEzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzIwMDAwLCBsZXZlbDogMTksIHBvaW50c05leHQ6IDE1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTUwMDAwLCBsZXZlbDogMjAsIHBvaW50c05leHQ6IDE4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODAwMDAwLCBsZXZlbDogMjEsIHBvaW50c05leHQ6IDIwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDcwMDAwLCBsZXZlbDogMjIsIHBvaW50c05leHQ6IDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzYwMDAwLCBsZXZlbDogMjMsIHBvaW50c05leHQ6IDI2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjcwMDAwLCBsZXZlbDogMjQsIHBvaW50c05leHQ6IDMwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAwLCBsZXZlbDogMjUsIHBvaW50c05leHQ6IDMzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzUwMDAwLCBsZXZlbDogMjYsIHBvaW50c05leHQ6IDM3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzIwMDAwLCBsZXZlbDogMjcsIHBvaW50c05leHQ6IDQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTEwMDAwLCBsZXZlbDogMjgsIHBvaW50c05leHQ6IDQ1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTIwMDAwLCBsZXZlbDogMjksIHBvaW50c05leHQ6IDQ5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTUwMDAwLCBsZXZlbDogMzAsIHBvaW50c05leHQ6IDU0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDAwMDAwLCBsZXZlbDogMzEsIHBvaW50c05leHQ6IDU4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1ODcwMDAwLCBsZXZlbDogMzIsIHBvaW50c05leHQ6IDYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MzYwMDAwLCBsZXZlbDogMzMsIHBvaW50c05leHQ6IDY4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2ODcwMDAwLCBsZXZlbDogMzQsIHBvaW50c05leHQ6IDc0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDAwMDAwLCBsZXZlbDogMzUsIHBvaW50c05leHQ6IDc5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTUwMDAwLCBsZXZlbDogMzYsIHBvaW50c05leHQ6IDg1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NTIwMDAwLCBsZXZlbDogMzcsIHBvaW50c05leHQ6IDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MTEwMDAwLCBsZXZlbDogMzgsIHBvaW50c05leHQ6IDk3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NzIwMDAwLCBsZXZlbDogMzksIHBvaW50c05leHQ6IDEwMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAzNTAwMDAsIGxldmVsOiA0MCwgcG9pbnRzTmV4dDogMTEwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTAwMDAwMCwgbGV2ZWw6IDQxLCBwb2ludHNOZXh0OiAxMTY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExNjcwMDAwLCBsZXZlbDogNDIsIHBvaW50c05leHQ6IDEyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIzNjAwMDAsIGxldmVsOiA0MywgcG9pbnRzTmV4dDogMTMwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzA3MDAwMCwgbGV2ZWw6IDQ0LCBwb2ludHNOZXh0OiAxMzgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzODAwMDAwLCBsZXZlbDogNDUsIHBvaW50c05leHQ6IDE0NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTQ1NTAwMDAsIGxldmVsOiA0NiwgcG9pbnRzTmV4dDogMTUzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTMyMDAwMCwgbGV2ZWw6IDQ3LCBwb2ludHNOZXh0OiAxNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2MTEwMDAwLCBsZXZlbDogNDgsIHBvaW50c05leHQ6IDE2OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTY5MjAwMDAsIGxldmVsOiA0OSwgcG9pbnRzTmV4dDogMTc3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNzc1MDAwMCwgbGV2ZWw6IDUwLCBwb2ludHNOZXh0OiAxODYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4NjAwMDAwLCBsZXZlbDogNTEsIHBvaW50c05leHQ6IDE5NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTk0NzAwMDAsIGxldmVsOiA1MiwgcG9pbnRzTmV4dDogMjAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMDM2MDAwMCwgbGV2ZWw6IDUzLCBwb2ludHNOZXh0OiAyMTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIxMjcwMDAwLCBsZXZlbDogNTQsIHBvaW50c05leHQ6IDIyMjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjIyMDAwMDAsIGxldmVsOiA1NSwgcG9pbnRzTmV4dDogMjMxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzE1MDAwMCwgbGV2ZWw6IDU2LCBwb2ludHNOZXh0OiAyNDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI0MTIwMDAwLCBsZXZlbDogNTcsIHBvaW50c05leHQ6IDI1MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjUxMTAwMDAsIGxldmVsOiA1OCwgcG9pbnRzTmV4dDogMjYxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNjEyMDAwMCwgbGV2ZWw6IDU5LCBwb2ludHNOZXh0OiAyNzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI3MTUwMDAwLCBsZXZlbDogNjAsIHBvaW50c05leHQ6IDI4MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjgyMDAwMDAsIGxldmVsOiA2MSwgcG9pbnRzTmV4dDogMjkyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyOTI3MDAwMCwgbGV2ZWw6IDYyLCBwb2ludHNOZXh0OiAzMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMzYwMDAwLCBsZXZlbDogNjMsIHBvaW50c05leHQ6IDMxNDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzE0NzAwMDAsIGxldmVsOiA2NCwgcG9pbnRzTmV4dDogMzI2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMjYwMDAwMCwgbGV2ZWw6IDY1LCBwb2ludHNOZXh0OiAzMzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNzUwMDAwLCBsZXZlbDogNjYsIHBvaW50c05leHQ6IDM0OTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzQ5MjAwMDAsIGxldmVsOiA2NywgcG9pbnRzTmV4dDogMzYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNjExMDAwMCwgbGV2ZWw6IDY4LCBwb2ludHNOZXh0OiAzNzMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MzIwMDAwLCBsZXZlbDogNjksIHBvaW50c05leHQ6IDM4NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzg1NTAwMDAsIGxldmVsOiA3MCwgcG9pbnRzTmV4dDogMzk4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzOTgwMDAwMCwgbGV2ZWw6IDcxLCBwb2ludHNOZXh0OiA0MTA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMDcwMDAwLCBsZXZlbDogNzIsIHBvaW50c05leHQ6IDQyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDIzNjAwMDAsIGxldmVsOiA3MywgcG9pbnRzTmV4dDogNDM2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MzY3MDAwMCwgbGV2ZWw6IDc0LCBwb2ludHNOZXh0OiA0NTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MDAwMDAwLCBsZXZlbDogNzUsIHBvaW50c05leHQ6IDQ2MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDYzNTAwMDAsIGxldmVsOiA3NiwgcG9pbnRzTmV4dDogNDc3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzcyMDAwMCwgbGV2ZWw6IDc3LCBwb2ludHNOZXh0OiA0OTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5MTEwMDAwLCBsZXZlbDogNzgsIHBvaW50c05leHQ6IDUwNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTA1MjAwMDAsIGxldmVsOiA3OSwgcG9pbnRzTmV4dDogNTE5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MTk1MDAwMCwgbGV2ZWw6IDgwLCBwb2ludHNOZXh0OiA1MzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUzNDAwMDAwLCBsZXZlbDogODEsIHBvaW50c05leHQ6IDU0ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQ4NzAwMDAsIGxldmVsOiA4MiwgcG9pbnRzTmV4dDogNTYzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NjM2MDAwMCwgbGV2ZWw6IDgzLCBwb2ludHNOZXh0OiA1Nzg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU3ODcwMDAwLCBsZXZlbDogODQsIHBvaW50c05leHQ6IDU5NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTk0MDAwMDAsIGxldmVsOiA4NSwgcG9pbnRzTmV4dDogNjA5NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDk1MDAwMCwgbGV2ZWw6IDg2LCBwb2ludHNOZXh0OiA2MjUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYyNTIwMDAwLCBsZXZlbDogODcsIHBvaW50c05leHQ6IDY0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjQxMTAwMDAsIGxldmVsOiA4OCwgcG9pbnRzTmV4dDogNjU3MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NTcyMDAwMCwgbGV2ZWw6IDg5LCBwb2ludHNOZXh0OiA2NzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY3MzUwMDAwLCBsZXZlbDogOTAsIHBvaW50c05leHQ6IDY5MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjkwMDAwMDAsIGxldmVsOiA5MSwgcG9pbnRzTmV4dDogNzA2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MDY3MDAwMCwgbGV2ZWw6IDkyLCBwb2ludHNOZXh0OiA3MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcyMzYwMDAwLCBsZXZlbDogOTMsIHBvaW50c05leHQ6IDc0MDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwNzAwMDAsIGxldmVsOiA5NCwgcG9pbnRzTmV4dDogNzU4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTgwMDAwMCwgbGV2ZWw6IDk1LCBwb2ludHNOZXh0OiA3NzU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc3NTUwMDAwLCBsZXZlbDogOTYsIHBvaW50c05leHQ6IDc5MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzkzMjAwMDAsIGxldmVsOiA5NywgcG9pbnRzTmV4dDogODExMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MTExMDAwMCwgbGV2ZWw6IDk4LCBwb2ludHNOZXh0OiA4MjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgyOTIwMDAwLCBsZXZlbDogOTksIHBvaW50c05leHQ6IDg0NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODQ3NTAwMDAsIGxldmVsOiAxMDAsIHBvaW50c05leHQ6IDg2NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODY2MDAwMDAsIGxldmVsOiAxMDEsIHBvaW50c05leHQ6IDg4NDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODg0NzAwMDAsIGxldmVsOiAxMDIsIHBvaW50c05leHQ6IDkwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTAzNjAwMDAsIGxldmVsOiAxMDMsIHBvaW50c05leHQ6IDkyMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTIyNzAwMDAsIGxldmVsOiAxMDQsIHBvaW50c05leHQ6IDk0MjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTQyMDAwMDAsIGxldmVsOiAxMDUsIHBvaW50c05leHQ6IDk2MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTYxNTAwMDAsIGxldmVsOiAxMDYsIHBvaW50c05leHQ6IDk4MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTgxMjAwMDAsIGxldmVsOiAxMDcsIHBvaW50c05leHQ6IDEwMDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDExMDAwMCwgbGV2ZWw6IDEwOCwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAyMTIwMDAwLCBsZXZlbDogMTA5LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDQxNTAwMDAsIGxldmVsOiAxMTAsIHBvaW50c05leHQ6IDEwNjE1MDAwMCB9LFxyXG4gIF07XHJcbiAgXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsRm9yUG9pbnRzKHBvaW50czogbnVtYmVyKTogTGV2ZWxEYXRhIHtcclxuICAgIGxldCBsZXZlbCA6TGV2ZWxEYXRhID0gbGV2ZWxEYXRhWzBdO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAocG9pbnRzID49IGRhdGEucG9pbnRzKSB7XHJcbiAgICAgICAgbGV2ZWwgPSBkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzUG9pbnRzRm9yTGV2ZWwodGFyZ2V0TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhdHVzUG9pbnRzID0gMDtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHRhcmdldExldmVsID09IGRhdGEubGV2ZWwgJiYgc3RhdHVzUG9pbnRzID09IDApIHtcclxuICAgICAgICBzdGF0dXNQb2ludHMgPSBkYXRhLnBvaW50cztcclxuICAgICAgfSBcclxuICAgIH1cclxuXHJcblx0XHRcclxuXHRcdHJldHVybiBzdGF0dXNQb2ludHNcclxuICB9XHJcbiAgXHJcblxyXG4vKlxyXG5jb25zdCBwb2ludHMgPSA1NTAwO1xyXG5jb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKHBvaW50cyk7XHJcbmNvbnNvbGUubG9nKGBXaXRoICR7cG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWx9LmApO1xyXG4qLyIsICJjb25zdCBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZTogc3RyaW5nW10gPSBbXHJcblx0XCJTZXZlbiBkYXlzIG9mIG5vdGUtdGFraW5nPyBZb3UncmUgcHJhY3RpY2FsbHkgYSBub3RlIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGZpZXN0YSEgXHVEODNDXHVERjg5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHBhcnR5IGdvaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSBZb3UncmUgbGlrZSB0aGUgSmFtZXMgQm9uZCBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERDc2XHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNlY3JldCBhZ2VudCFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgJ05vdGUtQS1EYXknIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhcGVzIG9wdGlvbmFsIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UndmUgcHJhY3RpY2FsbHkgd3JpdHRlbiBhIG1pbmkgbm92ZWwgYnkgbm93ISBcdUQ4M0RcdURDREFcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgYXV0aG9yIHN0YXR1cyBhY2hpZXZlZCFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVXNhaW4gQm9sdCBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNwcmludGluZyB0b3dhcmRzIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzcHJlZSEgSXQncyBsaWtlIGEgbm90ZXMtcGxvc2lvbiEgXHVEODNEXHVEQ0E1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIGZpcmV3b3JrcyBjb21pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBiYXNpY2FsbHkgdGhlIE1pY2hhZWwgSm9yZGFuIG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2xhbSBkdW5rIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1WUCEgXHVEODNDXHVERkM2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2NvcmluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAnU2V2ZW4gRGF5IE5vdGUgRmV2ZXInIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2F0Y2ggdGhlIGZldmVyIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyByb2Nrc3RhciEgXHVEODNDXHVERkI4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgamFtbWluJyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBtYWdpYyBzaG93ISBOb3cgeW91IHNlZSB0aGUgbm90ZXMsIG5vdyB5b3UgZG9uJ3QhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIGxpa2UgYSBub3RlLXRha2luZyBKZWRpIE1hc3RlciEgXHVEODNDXHVERjBDXHUyNjk0XHVGRTBGIFtYXSBwb2ludHMsIG1heSB0aGUgbm90ZXMgYmUgd2l0aCB5b3UhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIE1hY0d5dmVyLCB0dXJuaW5nIGluZm9ybWF0aW9uIGludG8gc29sdXRpb25zISBcdUQ4M0RcdUREMjdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjcmFmdGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGNoZWYsIGNvb2tpbmcgdXAgYSBrbm93bGVkZ2UgZmVhc3QhIFx1RDgzQ1x1REY3M1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNvb2tpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDBcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBMZXdpcyBhbmQgQ2xhcmssIGNoYXJ0aW5nIG5ldyB0ZXJyaXRvcmllcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1RERGQVx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgZGV0ZWN0aXZlLCBzb2x2aW5nIGNhc2VzIG9mIGN1cmlvc2l0eSEgXHVEODNEXHVERDc1XHVGRTBGXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZGV0ZWN0aW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgcGlvbmVlciwgYmxhemluZyB0cmFpbHMgdGhyb3VnaCB0aGUgZm9yZXN0cyBvZiBpbmZvcm1hdGlvbiEgXHVEODNDXHVERjMyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGlvbmVlcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREosIGRyb3BwaW5nIGJlYXRzIG9mIHdpc2RvbSEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc3Bpbm5pbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgdHJlYXN1cmUgaHVudCwgZGlzY292ZXJpbmcgZ2VtcyBvZiB3aXNkb20hIFx1RDgzRFx1REM4RVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGh1bnRpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIG5pbmphIHdhcnJpb3IsIGNvbnF1ZXJpbmcgdGhlIGtub3dsZWRnZSBvYnN0YWNsZSBjb3Vyc2UhIFx1RDgzRVx1REQ0Qlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsYXlpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIlxyXG5dO1xyXG5cclxuY29uc3QgdHdvTm90ZU1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJvb20hIFlvdSBqdXN0IGFjZWQgdGhlIDItbm90ZSB0YW5nbyEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCBncm9vdmluJyFcIixcclxuXHRcIlR3byBub3RlcyBpbiBhIGRheT8gWW91J3JlIG9mZmljaWFsbHkgYSBOb3RlIE5pbmphISBcdUQ4M0VcdURENEIgW1hdIHBvaW50cyBlYXJuZWQuIFJvY2sgb24hXCIsXHJcblx0XCJIaWdoLWZpdmUhIFlvdSd2ZSBjb25xdWVyZWQgdGhlIDItbm90ZSByb2RlbyEgXHVEODNFXHVERDIwIFtYXSBwb2ludHMgZWFybmVkLiBZZWVoYXchXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSEgVHdvIG5vdGVzIGluIG9uZSBkYXksIHlvdSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBUd28gbm90ZXMgaW4gYSBkYXkgLSB3aGF0J3MgeW91ciBzZWNyZXQgd2VhcG9uPyBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIkthYm9vbSEgWW91IGp1c3QgYmxldyB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHdhdGVyISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBvZmZpY2lhbGx5IGEgMi1ub3RlIHN1cGVyc3RhciEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgaW4gdGhlIGJhZy4gS2VlcCBzaGluaW5nIVwiLFxyXG5cdFwiRG91YmxlIHVwLCBkb3VibGUgZG93biEgVHdvIG5vdGVzIGluIG9uZSBkYXkgLSB5b3UncmUgYSByb2Nrc3RhciEgXHVEODNDXHVERkI4IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBwYXJ0eSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJLYS1jaGluZyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgcmFja2luZyB1cCB0aG9zZSBwb2ludHMhIFx1RDgzRFx1RENCMCBbWF0gZWFybmVkIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZ2ljaWFuISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgdHJpY2s/XCIsXHJcblx0XCJUd28gbm90ZXM/IE5haWxlZCBpdCEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IGdvaW5nIVwiLFxyXG5cdFwiQWJyYS1jYWRhYnJhISBUd28gbm90ZXMgYXBwZWFyISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUsIGRvdWJsZSB0aGUgZnVuISBUd28gbm90ZXMgaW4gb25lIGRheSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCBqb2luZWQgdGhlIDItbm90ZSBmaWVzdGEhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthcG93ISBUd28gbm90ZXMgaW4gYSBkYXkgLSB5b3UncmUgYSBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRiBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGFkdmVudHVyZT9cIixcclxuXHRcIkJpbmdvISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIlxyXG5dO1xyXG5cclxuY29uc3QgcmFuZG9tUG9pbnROb3RpY2VzOiBzdHJpbmdbXSA9IFtcclxuXHRcIkJhemluZ2EhIFlvdSBqdXN0IHNuYWdnZWQgW1hdIHBvaW50cyFcIixcclxuXHRcIkthYm9vbSEgW1hdIHBvaW50cyBhcmUgbm93IGluIHlvdXIgcG9ja2V0IVwiLFxyXG5cdFwiV29vaG9vISBbWF0gcG9pbnRzIGVhcm5lZCEgS2VlcCBpdCB1cCFcIixcclxuXHRcIlBvaW50cyBhaG95ISBbWF0gbW9yZSBpbiB0aGUgYmFuayFcIixcclxuXHRcIlNjb3JlISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgdG90YWwhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWmlwcGl0eS16YXAhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkNoYW1waW9uIG1vdmUhIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiQmluZ28hIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiU2hhemFtISBbWF0gcG9pbnRzIHRvIHRoZSByZXNjdWUhXCIsXHJcblx0XCJLYS1jaGluZyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQnJhdm8hIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciBzdGFzaCFcIixcclxuXHRcIldlbGwgZG9uZSEgW1hdIG1vcmUgcG9pbnRzIGluIHRvdyFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cywganVzdCBsaWtlIHRoYXQhXCIsXHJcblx0XCJBIHJvdW5kIG9mIGFwcGxhdXNlIGZvciBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiV2hvb3NoISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIldvbyEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIkdyZWF0IGpvYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJGYW50YXN0aWMhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIkhvb3JheSEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJOaWNlIG9uZSEgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0IVwiLFxyXG5cdFwiV29vdCB3b290ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCYW0hIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkNvb2wgYmVhbnMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiU3BsZW5kaWQhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk1hcnZlbG91cyEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYW55ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJFeHF1aXNpdGUhIFtYXSBwb2ludHMgaW4geW91ciBzdGFzaCFcIixcclxuXHRcIk91dHN0YW5kaW5nISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSBqb2IhXCIsXHJcblx0XCJNYWduaWZpY2VudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaaWd6YWchIFtYXSBwb2ludHMgaW4geW91ciB0YWxseSFcIixcclxuXHRcIlRlcnJpZmljISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJTdXBlcmIhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlpvd2llISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJFeGNlbGxlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIkF3ZXNvbWUhIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIldlbGwgcGxheWVkISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiSW1wcmVzc2l2ZSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJyaWxsaWFudCEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTmljZSBtb3ZlISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJTdGVsbGFyISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIldlbGwgZGVzZXJ2ZWQhIFtYXSBwb2ludHMgZWFybmVkIVwiXHJcbl07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2UubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2VbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHR3b05vdGVNZXNzYWdlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSB0d29Ob3RlTWVzc2FnZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbU1lc3NhZ2VQb2ludHMocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZG9tUG9pbnROb3RpY2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHJhbmRvbVBvaW50Tm90aWNlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbi8vIEV4YW1wbGUgdXNhZ2VcclxuLy8gY29uc3QgcmFuZG9tUG9pbnRzID0gMTAwOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgcG9pbnRzIHZhbHVlXHJcbi8vIGNvbnN0IHJhbmRvbU1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHJhbmRvbVBvaW50cyk7XHJcbi8vIGNvbnNvbGUubG9nKHJhbmRvbU1lc3NhZ2UpO1xyXG5cclxuXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQXFFOzs7QUNBckUsc0JBQStDO0FBR3hDLElBQU0sa0JBQXNDO0FBQUEsRUFDakQsbUJBQW1CO0FBQUEsRUFDbkIsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsYUFBYTtBQUFBLEVBQ2Isa0JBQWtCO0FBQUEsRUFDbEIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CO0FBQUEsRUFDbkIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUEsRUFDeEIsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQ3JCO0FBOEJPLElB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USxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxJQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLEtBQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDakQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksSUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxLQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ25ELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdEQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQ3pEO0FBRU8sU0FBUyxrQkFBa0IsUUFBMkI7QUFDM0QsTUFBSSxRQUFtQixVQUFVLENBQUM7QUFDbEMsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxVQUFVLEtBQUssUUFBUTtBQUN6QixjQUFRO0FBQUEsSUFDVixPQUFPO0FBQ0w7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVPLFNBQVMscUJBQXFCLGFBQTZCO0FBQ2hFLE1BQUksZUFBZTtBQUNuQixhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLGVBQWUsS0FBSyxTQUFTLGdCQUFnQixHQUFHO0FBQ2xELHFCQUFlLEtBQUs7QUFBQSxJQUN0QjtBQUFBLEVBQ0Y7QUFHRixTQUFPO0FBQ1A7OztBQzlJRixJQUFNLDBCQUFvQztBQUFBLEVBQ3pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxrQkFBNEI7QUFBQSxFQUNqQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTSxxQkFBK0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxF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QSxFQUNEO0FBRUEsTUFBSSxlQUFlLGFBQWEsV0FBVyxRQUFRLGtCQUFNO0FBQ3pELGlCQUFlLGFBQWEsV0FBVyxRQUFRLDBCQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyw0QkFBUSxNQUFNO0FBQ3JELGlCQUFlLGFBQWEsV0FBVyxvQkFBUSxNQUFNO0FBRXJELFNBQU8saUJBQWlCLFlBQVk7QUFDckM7QUFFQSxTQUFTLDZCQUE2QixlQUF1QixXQUEyQjtBQUN2RixNQUFJO0FBQ0osTUFBSSxTQUFTLGVBQWUsRUFBRSxJQUFJLFdBQVU7QUFDM0MsbUJBQWUsWUFBWSxTQUFTLGVBQWUsRUFBRTtBQUFBLEVBQ3RELE9BQU87QUFDTixtQkFBZTtBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgIm9iaiIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJkZWZhdWx0T3B0aW9ucyIsICJNSUxMSVNFQ09ORFNfSU5fV0VFSyIsICJmb3JtYXR0ZXJzIiwgImxvY2FsaXplIiwgInkiLCAiTSIsICJkIiwgImEiLCAiaCIsICJIIiwgIm0iLCAicyIsICJTIiwgImRhdGVMb25nRm9ybWF0dGVyIiwgImZvcm1hdExvbmciLCAidGltZUxvbmdGb3JtYXR0ZXIiLCAiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiwgImZvcm1hdCIsICJmb3JtYXREaXN0YW5jZSIsICJmb3JtYXQiLCAiZm9ybWF0UmVsYXRpdmUiLCAib3JkaW5hbE51bWJlciIsICJ2YWx1ZUNhbGxiYWNrIiwgImRlZmF1bHRPcHRpb25zIiwgImxvY2FsZSIsICJtYXRjaCIsICJwYXRoIiwgImFwcCIsICJmaWxlTmFtZSIsICJjdXJyZW50Q291bnQiLCAiaSIsICJpIiwgImUiLCAiaSIsICJtYXRjaCIsICJmaWxlIiwgImFwcCJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLnRzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24udHMiLCAic3JjL2JhZGdlcy50cyIsICJzcmMvbGV2ZWxzLnRzIiwgInNyYy9yYW5kb21Ob3RpZmljYXRpb25UZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0FwcCwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3N9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XHJcbmltcG9ydCB7XHJcblx0YXZhdGFySW5pdENvbnRlbnQsXHJcblx0cG9pbnRzTWFqdXJpdHksXHJcblx0cG9pbnRzTm90ZU1hanVyaXR5LFxyXG5cdHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlLFxyXG5cdHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSxcclxuXHRzdHJlYWtib29zdGVyRGVjcmVhc2UsXHJcblx0c3RyZWFrYm9vc3RlckluY3JlYXNlRGFpbHksXHJcblx0c3RyZWFrYm9vc3RlckluY3JlYXNlV2Vla2x5XHJcbn0gZnJvbSAnLi9jb25zdGFudHMnXHJcbmltcG9ydCB7XHJcblx0Y291bnRfaW5saW5rcyxcclxuXHRjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUsXHJcblx0Y291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzLFxyXG5cdGdldEZpbGVDb3VudE1hcCxcclxuXHRnZXRGaWxlTWFwLFxyXG5cdGdldE51bWJlck9mT3V0bGlua3MsXHJcblx0cmF0ZURpcmVjdGlvbixcclxuXHRyYXRlSW5saW5rcyxcclxuXHRyYXRlTGVuZ3RoRmlsZW5hbWUsXHJcblx0cmF0ZUxldmVsT2ZNYXR1cml0eSxcclxuXHRyYXRlTm90ZUxlbmd0aCxcclxuXHRyYXRlT3V0bGlua3MsXHJcblx0cmF0ZVByb2dyZXNzaXZlU3VtbWFyaXphdGlvblxyXG59IGZyb20gJy4vbWFqdXJpdHljYWxjdWxhdGlvbidcclxuaW1wb3J0IHtcclxuXHRjcmVhdGVDaGFydEZvcm1hdCxcclxuXHRmaW5kRWFybGllc3RNb2RpZmllZEZpbGUsXHJcblx0Z2V0TW9kaWZpY2F0aW9uRGF0ZXMsXHJcblx0bW9udGhzQmV0d2VlbixcclxuXHRyZXBsYWNlQ2hhcnRDb250ZW50XHJcbn0gZnJvbSAnLi9jcmVhdG1vZGNoYXJ0Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7QmFkZ2UsIGNoZWNrSWZSZWNlaXZlQUJhZGdlLCBnZXRCYWRnZUZvckluaXRMZXZlbCwgZ2V0QmFkZ2VGb3JMZXZlbH0gZnJvbSAnLi9iYWRnZXMnXHJcbmltcG9ydCB7Z2V0TGV2ZWxGb3JQb2ludHMsIHN0YXR1c1BvaW50c0ZvckxldmVsfSBmcm9tICcuL2xldmVscydcclxuaW1wb3J0IHR5cGUge01vbWVudH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZSwgZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UgLCBnZXRSYW5kb21NZXNzYWdlUG9pbnRzIH0gZnJvbSAnLi9yYW5kb21Ob3RpZmljYXRpb25UZXh0J1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZ2FtaWZpY2F0aW9uIGV4dGVuZHMgUGx1Z2luIHtcclxuXHRwdWJsaWMgc2V0dGluZ3M6IEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzO1xyXG5cdHByaXZhdGUgdGltZXJJbnRlcnZhbDogbnVtYmVyO1xyXG5cdHByaXZhdGUgdGltZXJJZDogbnVtYmVyIHwgbnVsbDtcclxuXHRwcml2YXRlIHN0YXR1c0Jhckl0ZW0gPSB0aGlzLmFkZFN0YXR1c0Jhckl0ZW0oKTtcclxuXHRwcml2YXRlIHN0YXR1c2JhckdhbWlmaWNhdGlvbiA9IHRoaXMuc3RhdHVzQmFySXRlbS5jcmVhdGVFbChcInNwYW5cIiwgeyB0ZXh0OiBcIlwiIH0pO1xyXG5cclxuXHRcclxuXHRhc3luYyBvbmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZygnb2JzaWRpYW4tcGttLWdhbWlmaWNhdGlvbiBsb2FkZWQhJyk7XHJcblxyXG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuXHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG5cdFx0Ly8gdGFrZSBjYXJlIHRvIHJlc2V0IHdoZW4gb3BlbmVkIG9uIGEgbmV3IGRheSwgZG9uJ3Qgd2FpdCBmb3IgdHJpZ2dlclxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRhd2FpdCB0aGlzLnJlc2V0RGFpbHlHb2FscygpXHJcblx0XHR9LCAyMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblxyXG5cdFx0Ly8gdG8gc2V0IHRpbWVyIGZvciByZXNldCBkYWlseSBhbmQgd2Vla2x5IGdvYWxzXHJcblx0XHR0aGlzLnRpbWVySW50ZXJ2YWwgPSAzMCAqIDYwICogMTAwMDsgLy8gbWludXRlcyB4IHNlY29uZHMgeCBtaWxsaXNlY29uZHNcclxuXHRcdHRoaXMudGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLnJlc2V0RGFpbHlHb2Fscy5iaW5kKHRoaXMpLCB0aGlzLnRpbWVySW50ZXJ2YWwpO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cclxuXHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5kZWJ1Zyl7XHJcblx0XHRcdHRoaXMuYWRkUmliYm9uSWNvbihcImFjY2Vzc2liaWxpdHlcIiwgXCJjaGFuZ2UgdGV4dCBmb3JtYXR0aW5nXCIsIGFzeW5jICgpID0+IHtcclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgcG9pbnRzUmVjZWl2ZWQgPSA1MDA7XHJcblx0XHRcdFx0Ly8gbmV3IE1vZGFsSW5mb3JtYXRpb25ib3godGhpcy5hcHAsIGBGaW5hbGl6ZWQgZ2FtaWZpY2F0aW9uIGluaXRpYWxpemF0aW9uIVxcbkNvbmdyYXR1bGF0aW9uLCB5b3UgZWFybmVkICR7cG9pbnRzUmVjZWl2ZWR9IFBvaW50cyFcXG5cXG5DaGVjayB0aGUgUHJvZmlsZSBQYWdlOiBcXFwiJHt0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lfS5tZFxcXCIuYCkub3BlbigpO1xyXG5cclxuXHRcdFx0XHQvLyBjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCAzMDApXHJcblx0XHRcdFx0Ly8gdGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IG5leHRCYWRnZUxldmVsID0gYXdhaXQgdGhpcy53aGljaExldmVsTmV4dEJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwpXHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coYE5cdTAwRTRjaHN0ZSBCYWRnZSBtaXQgTGV2ZWwgJHtuZXh0QmFkZ2VMZXZlbH1gKVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gY29uc3QgaW5pdEJhZGdlIDogQmFkZ2UgPSBhd2FpdCBnZXRCYWRnZUZvckluaXRMZXZlbCh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKTtcclxuXHRcdFx0XHQvLyBhd2FpdCB0aGlzLmdpdmVJbml0QmFkZ2VJblByb2ZpbGUodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0XHQvLyBhd2FpdCB0aGlzLnJlbW92ZUJhZGdlc1doZW5Jbml0TGV2ZWxIaWdoZXIodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSAsdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbClcclxuXHRcdFx0XHQvLyBhd2FpdCB0aGlzLmJvb3N0ZXJGb3JJbml0KClcclxuXHJcblx0XHRcdFx0Ly8gdGhpcy5vcGVuQXZhdGFyRmlsZSgpXHJcblxyXG5cclxuXHRcdFx0XHQvLyBjaGFuZ2UgdGV4dCBpbiBzdGF0dXMgYmFyXHJcblxyXG5cdFx0XHRcdC8vIHRoaXMudXBkYXRlU3RhdHVzQmFyKHN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdFx0XHQvL3N0YXR1c2JhckdhbWlmaWNhdGlvbi5zZXRUZXh0KFwiSGFsbG9cIilcclxuXHJcblxyXG5cdFx0XHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cclxuXHRcdFx0XHQvLyB0aGlzLmxvYWRTZXR0aW5ncygpXHJcblx0XHRcdFx0YXdhaXQgdGhpcy5yZXNldERhaWx5R29hbHMoKVxyXG5cclxuXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJzcHJvdXRcIiwgXCJDYWxjdWxhdGUgTm90ZSBNYXR1cml0eVwiLCBhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vY29uc3QgZmlsZTogVEZpbGUgfCBudWxsID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5jYWxjdWxhdGVOb3RlTWFqdXJpdHkoKTtcclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZCl7XHJcblx0XHRcdC8vIGNvbW1hbmQgSW5pdGlhbGl6ZSBnYW1pZmljYXRpb24gcmF0aW5nc1xyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAnaW5pdC1yYXRlLWdhbWlmaWNhdGlvbicsXHJcblx0XHRcdFx0bmFtZTogJ0luaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3MnLFxyXG5cdFx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmluaXRpYWxpemVHYW1lKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZCl7XHJcblx0XHRcdC8vIGNvbW1hbmQgY3JlYXRlIGF2YXRhciBwcm9maWxlIHBhZ2VcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2NyZWF0ZS1hdmF0YXItcGFnZScsXHJcblx0XHRcdFx0bmFtZTogJ2NyZWF0ZSBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcDtcclxuXHRcdFx0XHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdFx0XHRjb25zdCBjaGFydFN0cmluZyA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhcnQodmF1bHQpXHJcblx0XHRcdFx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZCkge1xyXG5cdFx0XHQvLyBjb21tYW5kOiByZXNldCBnYW1lXHJcblx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0aWQ6ICdyZXNldC1nYW1lJyxcclxuXHRcdFx0XHRuYW1lOiAncmVzZXQgdGhlIGdhbWUnLFxyXG5cdFx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNldEdhbWUoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBjb21tYW5kOiB1cGRhdGUgY2hhcnQgaW4gQXZhdGFyIFBhZ2VcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAndXBkYXRlLWNoYXJ0LWF2YXRhcnBhZ2UnLFxyXG5cdFx0XHRuYW1lOiAndXBkYXRlIGNoYXJ0IG9uIHByb2ZpbGUgcGFnZScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cdFx0XHRcdGNvbnN0IGNoYXJ0U3RyaW5nID0gYXdhaXQgdGhpcy5jcmVhdGVDaGFydCh2YXVsdClcclxuXHRcdFx0XHRhd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUsIGNoYXJ0U3RyaW5nKVxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cclxuXHRcdC8vIGNvbW1hbmQ6IHJhdGUgbm90ZSBtYXR1cml0eVxyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdyYXRlLW5vdGUtbWF0dXJpdHknLFxyXG5cdFx0XHRuYW1lOiAnUmF0ZSBub3RlIG1hanVyaXR5JyxcclxuXHRcdFx0Y2FsbGJhY2s6IGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmNhbGN1bGF0ZU5vdGVNYWp1cml0eSgpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cclxuXHRcdC8vIGNvbW1hbmQ6IGNoYW5nZSBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIHN5bWJvbHNcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnY2hhbmdlLXByb2dyZXNzaXZlLWZvcm1hdHRpbmcnLFxyXG5cdFx0XHRuYW1lOiAndG9nZ2xlIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gZm9ybWF0dGluZycsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgcmVwbGFjZUZvcm1hdFN0cmluZ3ModGhpcy5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiwgdGhpcy5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyk7XHJcblx0XHRcdH0sXHJcblx0XHR9KTtcclxuXHJcblx0fVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHJlc2V0R2FtZSgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUtleXNGcm9tRnJvbnRtYXR0ZXIoKTtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsID0gMTtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyA9IDA7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbCA9IDEwMDBcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gZmFsc2VcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciA9IDFcclxuICAgICAgICBhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cygwKVxyXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG4gICAgICAgIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgR2FtZSBpcyBub3cgcmVzZXRlZC4gUGxlYXNlIGRlbGV0ZSB0aGUgUHJvZmlsZSBQYWdlOiBcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcIiBtYW51YWxseS5gKS5vcGVuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplR2FtZShzdGF0dXNiYXJHYW1pZmljYXRpb246IEhUTUxTcGFuRWxlbWVudCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5nYW1pZmljYXRpb25TdGFydERhdGUgPSBmb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQnKTtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblxyXG5cdFx0Y29uc3Qge3ZhdWx0fSA9IHRoaXMuYXBwO1xyXG5cdFx0YXdhaXQgY3JlYXRlQXZhdGFyRmlsZSh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcclxuXHRcdGNvbnN0IGNoYXJ0U3RyaW5nID0gYXdhaXQgdGhpcy5jcmVhdGVDaGFydCh2YXVsdClcclxuXHRcdGF3YWl0IHJlcGxhY2VDaGFydENvbnRlbnQodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgY2hhcnRTdHJpbmcpXHJcblx0XHRhd2FpdCB0aGlzLm9wZW5BdmF0YXJGaWxlKClcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcDogVEZpbGVbXSA9IGF3YWl0IGdldEZpbGVNYXAodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MudGFnc0V4Y2x1ZGUsIHRoaXMuc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSk7XHJcblx0XHRjb25zb2xlLmxvZyhgZmlsZUNvdW50TWFwIGxvYWRlZC4gTnVtYmVyIG9mIGZpbGVzOiAke2ZpbGVDb3VudE1hcC5sZW5ndGh9YCk7XHJcblxyXG5cdFx0bGV0IHBvaW50c1JlY2VpdmVkID0gMDsgLy8gdG8gaGF2ZSBvbmUgbWVzc2FnZSBhdCB0aGUgZW5kIGhvdyBtYW55IHBvaW50cyByZWNlaXZlZFxyXG5cclxuXHRcdGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZUNvdW50TWFwKSB7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlTmFtZVxyXG5cdFx0XHRjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdFx0Y29uc3QgYWN0aXZlVmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XHJcblx0XHRcdGlmIChhY3RpdmVWaWV3ICYmIGFjdGl2ZVZpZXcuZmlsZSAmJiBhY3RpdmVWaWV3LmZpbGUucGF0aCA9PT0gZmlsZS5wYXRoKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGBGaWxlICR7ZmlsZS5wYXRofSBpcyBjdXJyZW50bHkgb3Blbi4gU2tpcHBpbmcuYCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZU5hbWUuYmFzZW5hbWU6ICR7ZmlsZU5hbWUuYmFzZW5hbWV9YClcclxuXHRcdFx0Y29uc3QgZmlsZUxlbmd0aCA9IGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lKTtcclxuXHRcdFx0Y29uc3QgcmF0ZUZpbGVMZW5ndGggPSByYXRlTm90ZUxlbmd0aChmaWxlTGVuZ3RoKTtcclxuXHRcdFx0Y29uc3Qge1xyXG5cdFx0XHRcdGNoYXJDb3VudCxcclxuXHRcdFx0XHRoaWdobGlnaHRlZENvdW50LFxyXG5cdFx0XHRcdGJvbGRDb3VudFxyXG5cdFx0XHR9ID0gY291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzKGZpbGVDb250ZW50cywgZmlsZU5hbWUuYmFzZW5hbWUsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHRjb25zdCByYXRlUHJvZ3Jlc3NpdmVTdW06IG51bWJlciA9IHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb24oY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQpO1xyXG5cdFx0XHRjb25zdCBmaWxlTmFtZVJhdGUgPSByYXRlTGVuZ3RoRmlsZW5hbWUoZmlsZS5uYW1lKTtcclxuXHRcdFx0Y29uc3QgaW5saW5rTnVtYmVyID0gY291bnRfaW5saW5rcyhmaWxlKTtcclxuXHRcdFx0Y29uc3QgaW5saW5rQ2xhc3MgPSByYXRlSW5saW5rcyhpbmxpbmtOdW1iZXIpLy8sIGZpbGVDb3VudE1hcC5zaXplKTtcclxuXHRcdFx0Y29uc3QgcmF0ZU91dCA9IHJhdGVPdXRsaW5rcyhnZXROdW1iZXJPZk91dGxpbmtzKGZpbGUpKTtcclxuXHRcdFx0Y29uc3Qgbm90ZU1hanVyaXR5ID0gcmF0ZUxldmVsT2ZNYXR1cml0eShyYXRlRmlsZUxlbmd0aCwgZmlsZU5hbWVSYXRlLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtKTtcclxuXHJcblxyXG5cdFx0XHRjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWUuYmFzZW5hbWV9IGluIHBhdGggJHtmaWxlTmFtZS5wYXRofWApO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNOb3RlTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVwiLCBub3RlTWFqdXJpdHkpKVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdub3RlLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ3RpdGxlLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGZpbGVOYW1lUmF0ZSkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSwgcmF0ZUZpbGVMZW5ndGgpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnbm90ZS1sZW5ndGgtY2xhc3MnIGluIGZyb250bWF0dGVyKSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcylcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBpbmxpbmtDbGFzcylcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ291dGxpbmstY2xhc3MnIGluIGZyb250bWF0dGVyKSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVPdXQpKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSkpXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknIGluIGZyb250bWF0dGVyKSkge1xyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cclxuXHRcdFx0XHRcdH1cclxuXHJcblxyXG5cdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocG9pbnRzUmVjZWl2ZWQgPiAwKSB7XHJcblx0XHRcdGxldCBib29zdGVyRmFjdG9yID0gMTtcclxuXHRcdFx0aWYgKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyU3RhdGUpe1xyXG5cdFx0XHRcdGJvb3N0ZXJGYWN0b3IgPSB0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvcjtcclxuXHRcdFx0fVxyXG5cdFx0XHRuZXcgTm90aWNlKGAke3BvaW50c1JlY2VpdmVkICogYm9vc3RlckZhY3Rvcn0gUG9pbnRzIHJlY2VpdmVkYClcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7cG9pbnRzUmVjZWl2ZWQgKiBib29zdGVyRmFjdG9yfSBQb2ludHMgcmVjZWl2ZWRgKVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEluc2lkZSB5b3VyIGZ1bmN0aW9uIHdoZXJlIHlvdSB3YW50IHRvIGludHJvZHVjZSBhIGRlbGF5XHJcblx0XHRzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuXHRcdFx0Ly8gQ29kZSB0aGF0IHlvdSB3YW50IHRvIGV4ZWN1dGUgYWZ0ZXIgdGhlIGRlbGF5XHJcblx0XHRcdGNvbnN0IGluaXRCYWRnZTogQmFkZ2UgPSBnZXRCYWRnZUZvckluaXRMZXZlbCh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKTtcclxuXHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2luaXRCYWRnZS5uYW1lfVwiIGJhZGdlLiAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgWW91IGVhcm5lZCAke2luaXRCYWRnZS5uYW1lfSAtICR7aW5pdEJhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdGF3YWl0IHRoaXMuZ2l2ZUluaXRCYWRnZUluUHJvZmlsZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBpbml0QmFkZ2UpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnJlbW92ZUJhZGdlc1doZW5Jbml0TGV2ZWxIaWdoZXIodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSwgdGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbClcclxuXHRcdFx0YXdhaXQgdGhpcy5ib29zdGVyRm9ySW5pdCgpXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0sIDIwMDApOyAvLyAyMDAwIG1pbGxpc2Vjb25kcyA9IDIgc2Vjb25kc1xyXG5cclxuXHRcdG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgRmluYWxsaXplZCBnYW1pZmljYXRpb24gaW5pdGlhbGlzdGF0aW9uIVxcbkNvbmdyYXR1bGF0aW9uLCB5b3UgZWFybmVkICR7cG9pbnRzUmVjZWl2ZWR9IFBvaW50cyFcXG5cXG5DaGVjayB0aGUgUHJvZmlsZSBQYWdlOiBcIiR7dGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZX0ubWRcIlxcblxcbllvdSByZWNlaXZlZCBhbiBpbml0aWFsaXNhdGlvbiBCb29zdGVyIGFrdGl2IGZvciB5b3VyIGZpcnN0IGxldmVsIHVwcy4gR2FtZSBvbiFgKS5vcGVuKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHdyaXRlRnJvbnRtYXR0ZXIoZnJvbnRtYXR0ZXI6IGFueSwgZmlsZU5hbWVSYXRlOiBudW1iZXIsIHJhdGVGaWxlTGVuZ3RoOiBudW1iZXIsIGlubGlua0NsYXNzOiBudW1iZXIsIHJhdGVPdXQ6IG51bWJlciwgcmF0ZVByb2dyZXNzaXZlU3VtOiBudW1iZXIsIG5vdGVNYWp1cml0eTogbnVtYmVyKSB7XHJcblx0XHRmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ3RpdGxlLWNsYXNzJ10sIGZpbGVOYW1lUmF0ZSlcclxuXHRcdGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSwgcmF0ZUZpbGVMZW5ndGgpXHJcblx0XHRmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdH1cclxuXHJcblx0b251bmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZygnb2JzaWRpYW4tcGttLWdhbWlmaWNhdGlvbiB1bmxvYWRlZCEnKTtcclxuXHJcblx0XHQvLyBDbGVhciB0aGUgdGltZXIgd2hlbiB0aGUgcGx1Z2luIGlzIHVubG9hZGVkXHJcblx0XHRpZiAodGhpcy50aW1lcklkICE9PSBudWxsKSB7XHJcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcklkKTtcclxuXHRcdFx0dGhpcy50aW1lcklkID0gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGNhbGN1bGF0ZU5vdGVNYWp1cml0eSgpe1xyXG5cdFx0Y29uc3QgZmlsZTogVEZpbGUgfCBudWxsPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG5cdFx0aWYgKGZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKCdnb3Qgbm8gZmlsZSwgcHJvcGFibHkgbm9uZSBpcyBhY3RpdmUnKVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkID0gZmFsc2U7XHJcblxyXG5cdFx0Ly8gZ2V0IGZpbGUgY29udGVudCBsZW5ndGhcclxuXHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYWN0aXZlVmlldz8uZWRpdG9yLmdldFZhbHVlKCk7XHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGFjdGl2ZVZpZXc/LmZpbGUuYmFzZW5hbWU7XHJcblxyXG5cdFx0bGV0IHJhdGVGaWxlTGVuZ3RoID0gMDtcclxuXHRcdGxldCBmaWxlTGVuZ3RoID0gMDtcclxuXHRcdGxldCByYXRlUHJvZ3Jlc3NpdmVTdW0gPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlQ29udGVudHMgIT09IHVuZGVmaW5lZCAmJiBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZSk7XHJcblx0XHRcdHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblxyXG5cdFx0XHQvLyBDaGVjayBpZiBmaWxlQ29udGVudHMgYW5kIGZpbGVOYW1lIGFyZSBub3QgbnVsbFxyXG5cdFx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSBudWxsICYmIGZpbGVOYW1lICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Y29uc3QgeyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9ID0gY291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzKGZpbGVDb250ZW50cywgZmlsZU5hbWUsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIsIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpO1xyXG5cdFx0XHRcdHJhdGVQcm9ncmVzc2l2ZVN1bSA9IHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb24oY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGZpbGVOYW1lUmF0ZSA9IDA7XHJcblx0XHRsZXQgaW5saW5rTnVtYmVyID0gMDtcclxuXHRcdGxldCBpbmxpbmtDbGFzcyA9IDA7XHJcblx0XHRsZXQgcmF0ZU91dCA9IDA7XHJcblxyXG5cdFx0aWYgKGZpbGUgIT09IG51bGwpIHtcclxuXHRcdFx0ZmlsZU5hbWVSYXRlID0gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGUubmFtZSA/PyAnJyk7XHJcblx0XHRcdGlubGlua051bWJlciA9IGNvdW50X2lubGlua3MoZmlsZSk7XHJcblx0XHRcdGlubGlua0NsYXNzID0gcmF0ZUlubGlua3MoaW5saW5rTnVtYmVyKS8vLCBudW1BbGxGaWxlcylcclxuXHRcdFx0cmF0ZU91dCA9IHJhdGVPdXRsaW5rcyhnZXROdW1iZXJPZk91dGxpbmtzKGZpbGUpKTtcclxuXHJcblx0XHRcdGNvbnN0IG5vdGVNYWp1cml0eSA9IHJhdGVMZXZlbE9mTWF0dXJpdHkocmF0ZUZpbGVMZW5ndGgsIGZpbGVOYW1lUmF0ZSwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSk7XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGlmIChmcm9udG1hdHRlcikge1xyXG5cdFx0XHRcdFx0XHRsZXQgcG9pbnRzUmVjZWl2ZWQgPSAwOyAvLyB0byBoYXZlIG9uZSBtZXNzYWdlIGF0IHRoZSBlbmQgaG93IG1hbnkgcG9pbnRzIHJlY2VpdmVkXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYG5vdGUtbWF0dXJpdHkgPj0xYClcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICghKCdub3RlLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBub3RlTWFqdXJpdHkpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbCk7XHJcblx0XHRcdFx0XHRcdFx0ZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpID49IDEgJiYgJ3RpdGxlLWNsYXNzJyBpbiBmcm9udG1hdHRlcil7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICghKCd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSwgcmF0ZUZpbGVMZW5ndGgpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSwgcmF0ZUZpbGVMZW5ndGgpKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnbm90ZS1sZW5ndGgtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZUZpbGVMZW5ndGgpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcylcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdpbmxpbmstY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBpbmxpbmtDbGFzcykpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dCkpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVPdXQpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlUHJvZ3Jlc3NpdmVTdW0pKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBwb2ludHNSZWNlaXZlZDogJHtwb2ludHNSZWNlaXZlZH1gKVxyXG5cdFx0XHRcdFx0XHRpZiAocG9pbnRzUmVjZWl2ZWQgPiAwKXtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlUG9pbnRzID0gZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyhwb2ludHNSZWNlaXZlZCAqICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlckZhY3RvciArIHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcikpXHJcblx0XHRcdFx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlUG9pbnRzKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2VQb2ludHMpXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRuZXcgTm90aWNlKCdub3RlIG1hanVyaXR5IHVwZGF0ZWQhJyk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdub3RlIG1hanVyaXR5IHVwZGF0ZWQhJylcclxuXHRcdFx0Ly9hd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKCdmaWxlIHdhcyBub3QgZm91bmQgdG8gY2FsY3VsYXRlIG1hanVyaXRpZXMuIE1ha2Ugc3VyZSBvbmUgaXMgYWN0aXZlLicpXHJcblx0XHR9XHJcblx0XHRpZiAoZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCl7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5jcmVhc2VEYWlseUNyZWF0ZWROb3RlQ291bnQoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZXNldERhaWx5R29hbHMoKXtcclxuXHRcdGxldCByZXNldCA9IGZhbHNlO1xyXG5cdFx0aWYoIWlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZGFpbHlOb3RlQ3JlYXRpb25UYXNrID0gMDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoIWlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSAmJiAhaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGNvbnN0IGRheXNQYXNzZWQgPSB3aW5kb3cubW9tZW50KCkuZGlmZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSwgJ2RheXMnKSAtIDE7IC8vdG9kYXkgaXMgc3RpbGwgYSBjaGFuY2UuIFxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPSAwO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpXHJcblx0XHRcdHRoaXMuZGVjcmVhc2VTdHJlYWtib29zdGVyKGRheXNQYXNzZWQpXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke2RheXNQYXNzZWR9IGRheXMgcGFzc2VkYClcclxuXHRcdFx0Ly90aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXJEYXRlID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdFx0Y29uc29sZS5sb2coYHdlZWtseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSAmJiB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgPT0gNyl7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9IDA7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHJlc2V0KXtcclxuXHRcdFx0Ly90aGlzLmRhaWx5Q2hhbGxlbmdlVXBkYXRlUHJvZmlsZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCAwKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSk7XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VEYWlseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGxldCBuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPSB0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzaztcclxuICAgICAgICBpZiAobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrIDwgMil7XHJcblx0XHRcdG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayArKztcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5kYWlseU5vdGVDcmVhdGlvblRhc2sgPSBuZXdEYWlseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblxyXG5cdFx0XHRpZihuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgPT0gMSl7XHJcblx0XHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBOb3RlcyBjcmVhdGVkIHRvZGF5LmApXHJcblx0XHRcdH0gZWxzZSBpZiAobmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrID09IDIpIHtcclxuXHRcdFx0XHR0aGlzLmluY3JlYXNlU3RyZWFrYm9vc3RlcihzdHJlYWtib29zdGVySW5jcmVhc2VEYWlseSlcclxuXHRcdFx0XHQvL3RoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJyk7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UpXHJcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlICogKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyKSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZWFjaGVkISAke25ld0RhaWx5Tm90ZUNyZWF0aW9uVGFza30vMiBjcmVhdGVkLmApXHJcblx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVdlZWtseUNyZWF0ZWROb3RlQ291bnQoKXtcclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25EYXRlLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHQvLyBkbyBub3RoaW5nXHJcblx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBub3RlIGNyZWF0aW9uIHdhcyByYXRlZCBhbHJlYWR5IHRvZGF5LmApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gMTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCkge1xyXG5cdFx0bGV0IGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPSB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2s7XHJcblx0XHRpZiAoY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA8IDcpIHtcclxuXHRcdFx0Y3VycmVudFdlZWtseUNyZWF0ZWROb3RlcysrO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvbkRhdGUgPSB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrID0gY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcztcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXIpIHtcclxuXHRcdGlmIChuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrIDw9IDYpIHtcclxuXHRcdFx0Ly8gdXBkYXRlIEF2YXRhciBQYWdlXHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlQXZhdGFyUGFnZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKHN0cmVha2Jvb3N0ZXJJbmNyZWFzZVdlZWtseSk7XHJcblx0XHRcdC8vdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyRGF0ZSA9IHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSlcclxuXHRcdFx0Y29uc29sZS5sb2coYFdlZWtseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cylcclxuXHRcdGNvbnN0IHByb2dyZXNzYmFyUGVyY2VudCA9ICh0aGlzLnNldHRpbmdzLnN0YXR1c1BvaW50cyAtIGN1cnJlbnRMZXZlbC5wb2ludHMpLyhjdXJyZW50TGV2ZWwucG9pbnRzTmV4dCAtIGN1cnJlbnRMZXZlbC5wb2ludHMpKjEwMDtcclxuXHRcdGNvbnN0IGNoYXJOdW1Qcm9ncmVzc2JhciA9IDEwO1xyXG5cdFx0Y29uc3QgYmFyTGVuZ3RoID0gTWF0aC5yb3VuZChwcm9ncmVzc2JhclBlcmNlbnQgLyBjaGFyTnVtUHJvZ3Jlc3NiYXIpXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsfSB8ICR7dGhpcy5jcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXIsIGJhckxlbmd0aCl9fFx1RDgzRFx1REU4MCR7Ym9vc3RlckZhY3Rvcn0ke3RoaXMucmF0ZUJvb3N0ZXJEaXJlY3Rpb24oKX1gKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnXHJcblx0XHQvKmNvbnN0IG9uZURheUJlZm9yZUN1cnJlbnQgPSB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpOyAvLyBDYWxjdWxhdGUgb25lIGRheSBiZWZvcmUgY3VycmVudCBkYXRlXHJcblx0XHRpZih3aW5kb3cubW9tZW50KHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZSwgJ0RELk1NLllZWVknKS5pc1NhbWUob25lRGF5QmVmb3JlQ3VycmVudCwgJ2RheScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwNlx1RkUwRidcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnXHJcblx0XHR9Ki9cclxuXHRcdGlmKHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUpe1xyXG5cdFx0XHRkaXJlY3Rpb24gPSAnXHUyQjA2XHVGRTBGJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDdcdUZFMEYnO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRpcmVjdGlvblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGdpdmVTdGF0dXNQb2ludHMocG9pbnRzVG9BZGQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvciA9IDE7XHJcblx0XHRsZXQgc3RyZWFrYm9vc3RlciA9IHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlcjtcclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvciA9IHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzID0gcG9pbnRzVG9BZGQgKiAoYm9vc3RlckZhY3RvciArIHN0cmVha2Jvb3N0ZXIpICsgdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHJcblx0XHRyZXR1cm4gdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0fVxyXG5cclxuXHRhc3luYyBpbmNyZWFzZVN0cmVha2Jvb3N0ZXIoaW5jcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld0Jvb3N0ZXJGYWtmb3IgPSBwYXJzZUZsb2F0KCh0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyBpbmNyZWFzZVZhbHVlKS50b0ZpeGVkKHN0cmVha2Jvb3N0ZXJJbmNyZWFzZVdlZWtseSkpO1xyXG5cdFx0aWYobmV3Qm9vc3RlckZha2ZvciA+IDgwKXtcclxuXHRcdFx0bmV3Qm9vc3RlckZha2ZvciA9IDgwO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3Qm9vc3RlckZha2ZvcjtcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSB0cnVlO1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Y29uc29sZS5sb2coYHN0cmVha2Jvb3N0ZXI6ICR7dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyfWApXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZGVjcmVhc2VTdHJlYWtib29zdGVyKGRlY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdGxldCBuZXdCb29zdGVyRmFrZm9yID0gcGFyc2VGbG9hdCgodGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyIC0gZGVjcmVhc2VWYWx1ZSkudG9GaXhlZChzdHJlYWtib29zdGVyRGVjcmVhc2UpKVxyXG5cdFx0dGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyID0gbmV3Qm9vc3RlckZha2ZvclxyXG5cdFx0aWYgKG5ld0Jvb3N0ZXJGYWtmb3IgPCAwKXtcclxuXHRcdFx0bmV3Qm9vc3RlckZha2ZvciA9IDBcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlciA9IG5ld0Jvb3N0ZXJGYWtmb3JcclxuXHRcdHRoaXMuc2V0dGluZ3Muc3RyZWFrYm9vc3RlckRhdGUgPSBmYWxzZTtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHR9XHJcblxyXG5cclxuXHJcblxyXG5cdGFzeW5jIHVwZGF0ZUF2YXRhclBhZ2UoYXZhdGFyUGFnZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgY3VycmVudCBzdGF0dXNQb2ludHM6ICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHN9YClcclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0MjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmxldmVsQW5kUG9pbnRzXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeZGFpbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UzID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UzID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiXmJvb3N0ZXJGYWN0b3JcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2U0ID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2U0ID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIHJlYWQgY3VycmVudCBQb2ludHMgZnJvbSBzZXR0aW5nc1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzID0gdGhpcy5zZXR0aW5ncy5zdGF0dXNQb2ludHNcclxuXHJcblx0XHRjb25zdCBsZXZlbCA9IGdldExldmVsRm9yUG9pbnRzKG5ld1BvaW50cyk7XHJcblx0XHRsZXQgbmV4dExldmVsQXQgPSB0aGlzLnNldHRpbmdzLnhwRm9yTmV4dExldmVsO1xyXG5cdFx0bGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbCA8IGxldmVsLmxldmVsKXtcclxuXHRcdFx0Ly8gTGV2ZWwgVXAgYXJjaGl2ZWRcclxuXHRcdFx0bmV3IE5vdGljZShgV2l0aCAke25ld1BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsLmxldmVsfS5gKVxyXG5cdFx0XHQvLyBjaGVjayBmaXJzdCBpZiB0aGlzIG1lYW5zIGEgbmV3IGJhZGdlIGJlZm9yZSBpdCBnZXRzIG92ZXJ3cml0dGVuXHJcblx0XHRcdHJlY2VpdmVCYWRnZSA9IGNoZWNrSWZSZWNlaXZlQUJhZGdlKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGxldmVsLmxldmVsKVxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsID0gbGV2ZWwubGV2ZWw7XHJcblx0XHRcdG5leHRMZXZlbEF0ID0gbGV2ZWwucG9pbnRzTmV4dDtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy54cEZvck5leHRMZXZlbCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwcm9ncmVzc0JhckVuZCA9IG5leHRMZXZlbEF0IC0gbmV3UG9pbnRzO1xyXG5cdFx0Y29uc3QgbmV3UG9pbnRzU3RyaW5nID0gJ3wgKipMZXZlbCoqICB8ICoqJyArIGxldmVsLmxldmVsICsgJyoqIHxcXG58IFBvaW50cyB8ICcgKyBuZXdQb2ludHMgKyAnICAgIHxcXG5ebGV2ZWxBbmRQb2ludHNcXG5gYGBjaGFydFxcbnR5cGU6IGJhclxcbmxhYmVsczogW0V4cHJpcmllbmNlXVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXFxuICAgIGRhdGE6IFsnICsgbmV3UG9pbnRzICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgcHJvZ3Jlc3NCYXJFbmQgKyAnXVxcbnhNaW46ICcgKyBsZXZlbC5wb2ludHMgKyAnXFxueE1heDogJyArIGxldmVsLnBvaW50c05leHQgKyAnXFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJ1xyXG5cdFx0Y29uc3QgZGFpbHlDaGFsbGVuZ2UgPSAnfCAqKmRhaWx5IE5vdGVzKiogfCAqJyArIHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlICogKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyKSArICdFUCogfCAqKicgKyB0aGlzLnNldHRpbmdzLmRhaWx5Tm90ZUNyZWF0aW9uVGFzayArICcvMioqICAgfCc7XHJcblx0XHRjb25zdCBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gOiBudW1iZXIgPSA3IC0gdGhpcy5zZXR0aW5ncy53ZWVrbHlOb3RlQ3JlYXRpb25UYXNrO1xyXG5cdFx0Y29uc3Qgd2Vla2x5Q2hhbGxlbmdlID0gJ3wgKip3ZWVrbHkgTm90ZXMqKiB8IConICsgcG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlICogKHRoaXMuc2V0dGluZ3MuYmFkZ2VCb29zdGVyRmFjdG9yICsgdGhpcy5zZXR0aW5ncy5zdHJlYWtib29zdGVyKSArICdFUCogICAgIHwgICoqJyArIHRoaXMuc2V0dGluZ3Mud2Vla2x5Tm90ZUNyZWF0aW9uVGFzayArICcvNyoqICAgfFxcbl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVxcbmBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbZGF5cyBkb25lIGluIGEgcm93XVxcbnNlcmllczpcXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcXG4gICAgZGF0YTogWycgKyB0aGlzLnNldHRpbmdzLndlZWtseU5vdGVDcmVhdGlvblRhc2sgKyAnXVxcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcXG4gICAgZGF0YTogWycgKyBkYXlzTGVmdEluV2Vla2x5Q2hhaW4gKyAnXVxcbnhNaW46IDBcXG54TWF4OiA3XFxudGVuc2lvbjogMC4yXFxud2lkdGg6IDQwJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxuaW5kZXhBeGlzOiB5XFxueFRpdGxlOiBcInByb2dyZXNzXCJcXG5sZWdlbmQ6IGZhbHNlXFxuYGBgJztcclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSAnfCAqKmJvb3N0ZXIgZmFjdG9yKiogfCAqKicgKyB0aGlzLnNldHRpbmdzLnN0cmVha2Jvb3N0ZXIgKyAnKiogfCdcclxuXHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsICYmIHJlZmVyZW5jZTMgIT0gbnVsbCAmJiByZWZlcmVuY2U0ICE9IG51bGwpe1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSAtIDI7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI0O1xyXG5cdFx0XHRzdGFydDIgPSByZWZlcmVuY2UyIC0gMSAtIDI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCAyNSBpcyBuZWVkZWRcclxuXHRcdFx0c3RhcnQzID0gcmVmZXJlbmNlMyAtIDEgLTI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGVuZDMgPSByZWZlcmVuY2UzICsgMjQgLTI1OyAvLyBubyBpZGVhIHdieSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdHN0YXJ0NCA9IHJlZmVyZW5jZTQgLSAxIC0gMjU7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCA1NSBpcyBuZWVkZWRcclxuXHRcdFx0ZW5kNCA9IHJlZmVyZW5jZTQgLSAyNSA7IC8vIG5vIGlkZWEgd2J5IG9mZnNldCA1NSBpcyBuZWVkZWRcclxuXHRcdFx0XHJcblxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIG5ld1BvaW50c1N0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCBkYWlseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMuc2xpY2UoZW5kMildO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczMgPSBbLi4ubmV3TGluZXMyLnNsaWNlKDAsIHN0YXJ0MyksIHdlZWtseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMyLnNsaWNlKGVuZDMpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXM0ID0gWy4uLm5ld0xpbmVzMy5zbGljZSgwLCBzdGFydDQpLCBib29zdGVyRmFjdG9yLCAuLi5uZXdMaW5lczMuc2xpY2UoZW5kNCldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzNC5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZWNlaXZlQmFkZ2VcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBnaXZlQmFkZ2VJblByb2ZpbGUoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgYmFkZ2U6IEJhZGdlKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBlbmQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGxpbmUgPT09IGJhZGdlLmxldmVsICsgXCI6ICpcIiArIGJhZGdlLm5hbWUgKyBcIipcIil7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTIgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDE7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGVuZDIgPSByZWZlcmVuY2UyICsgMjtcclxuXHRcdFx0c3RhcnQyID0gcmVmZXJlbmNlMiArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqIFwiICsgYmFkZ2UubGV2ZWwgKyBcIlxcbj4gXCIgKyBiYWRnZS5kZXNjcmlwdGlvbiArIFwiIC0gKlwiICsgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnRC5NLllZJykgKyBcIipcXG5cIlxyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCBzdGFydCksIGJhZGdlU3RyaW5nLCAuLi5saW5lcy5zbGljZShlbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIHN0YXJ0MiksIC4uLm5ld0xpbmVzLnNsaWNlKGVuZDIpXVxyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzMi5qb2luKFwiXFxuXCIpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBnaXZlSW5pdEJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCIjIyMjIGFjaGlldmVkXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICl7XHJcblx0XHRcdGVuZCA9IHJlZmVyZW5jZSArIDI7XHJcblx0XHRcdHN0YXJ0ID0gcmVmZXJlbmNlICsgMTtcclxuXHJcblx0XHRcdGNvbnN0IGJhZGdlU3RyaW5nID0gXCIqKlwiICsgYmFkZ2UubmFtZSArIFwiKipcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3TGluZXMuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYWRnZVN0cmluZzogJHtiYWRnZVN0cmluZ31gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgcmVtb3ZlQmFkZ2VzV2hlbkluaXRMZXZlbEhpZ2hlcihhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBsZXZlbDogbnVtYmVyKXtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7YXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgJHthdmF0YXJQYWdlTmFtZX0ubWQgZG9lcyBub3QgZXhpc3RgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRsZXQgcmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgb3V0c3RhbmRpbmdcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyID09IG51bGwpe1xyXG5cdFx0XHRcdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbGV2ZWwgbnVtYmVyXHJcblx0XHRcdFx0Y29uc3QgbGV2ZWxSZWdleCA9IC9sZXZlbCAoXFxkKykvO1xyXG5cdFx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKGxldmVsUmVnZXgpO1xyXG5cclxuXHRcdFx0XHRpZihtYXRjaCl7XHJcblx0XHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRcdGlmIChsZXZlbE51bWJlciA+IGxldmVsKSB7XHJcblx0XHRcdFx0XHRcdHJlZmVyZW5jZTIgPSBpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocmVmZXJlbmNlICE9IG51bGwgJiYgcmVmZXJlbmNlMiAhPSBudWxsKXtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgcmVmZXJlbmNlICsgMSksIC4uLmxpbmVzLnNsaWNlKHJlZmVyZW5jZTIpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lcy5qb2luKFwiXFxuXCIpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBjcmVhdGVDaGFydCh2YXVsdDogVmF1bHQpOiBQcm9taXNlPHN0cmluZz57XHJcblx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RmlsZSA9IGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlcylcclxuXHRcdC8vbGV0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lXHJcblx0XHQvL2lmIChlYXJsaWVzdEZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0RmlsZS5zdGF0LmN0aW1lICl7XHJcblx0XHRjb25zdCBlYXJsaWVzdERhdGUgPSBlYXJsaWVzdEZpbGUuc3RhdC5tdGltZVxyXG5cdFx0Ly99XHJcblxyXG5cdFx0bGV0IG1vbnRoQ291bnRlciA9IDAgLy9mb3JtYXQobmV3IERhdGUoZWFybGllc3REYXRlKSwgJ01NJyk7XHJcblx0XHRsZXQgZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHQvL2NvbnN0IGZpbGVEYXRlTW9udGhNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cdFx0Y29uc3QgZmlsZURhdGVNb250aE1hcE1vZCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblx0XHRjb25zdCBtb250aGNvdW50ID0gbW9udGhzQmV0d2VlbihuZXcgRGF0ZShlYXJsaWVzdERhdGUpLCBuZXcgRGF0ZSgpKVxyXG5cdFx0bGV0IGRhdGVTdHJpbmcgPSBkYXRlQ291bnQuZ2V0TW9udGgoKSsxICsgXCIuXCIgKyBkYXRlQ291bnQuZ2V0RnVsbFllYXIoKVxyXG5cdFx0bGV0IHlMYWJlbCA9IFwiXCJcclxuXHRcdC8vIGNyZWF0ZSBCYXNlIGZvciBjb3VudGluZyBjcmVhdGVkXHJcblx0XHQvKndoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHRkYXRlQ291bnQuc2V0TW9udGgoZGF0ZUNvdW50LmdldE1vbnRoKCkgKyAxKVxyXG5cdFx0XHRtb250aENvdW50ZXIgKz0gMTtcclxuXHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZGF0ZVN0cmluZywgMClcclxuXHRcdH0qL1xyXG5cclxuXHRcdG1vbnRoQ291bnRlciA9IDBcclxuXHRcdGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgbW9kaWZpZWRcclxuXHRcdHdoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdC8vY29uc29sZS5sb2coYGRhdGVTdHJpbmc6ICR7ZGF0ZVN0cmluZ31gKVxyXG5cdFx0XHR5TGFiZWwgPSB5TGFiZWwgKyBkYXRlU3RyaW5nICsgXCIsIFwiXHJcblx0XHRcdGRhdGVDb3VudC5zZXRNb250aChkYXRlQ291bnQuZ2V0TW9udGgoKSArIDEpXHJcblx0XHRcdG1vbnRoQ291bnRlciArPSAxO1xyXG5cdFx0XHRmaWxlRGF0ZU1vbnRoTWFwTW9kLnNldChkYXRlU3RyaW5nLCAwKVxyXG5cdFx0fVxyXG5cdFx0eUxhYmVsID0geUxhYmVsLnNsaWNlKDAseUxhYmVsLmxlbmd0aC0yKVxyXG5cclxuXHRcdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdC8qY29uc3QgY3JlYXRpb25EYXRlcyA9IGdldENyZWF0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNyZWF0aW9uRGF0ZXMubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHQvL2ZpbGVEYXRlTW9udGhNYXAuc2V0KGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5JyksZmlsZURhdGVNb250aE1hcC5nZXQoZm9ybWF0KGNyZWF0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChjcmVhdGlvbkRhdGVzW2ldLCAnTS55eXl5Jyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVEYXRlTW9udGhNYXAuZ2V0KGZvcm1hdHRlZERhdGUpO1xyXG5cclxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcC5zZXQoZm9ybWF0dGVkRGF0ZSwgY3VycmVudENvdW50ICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IGluIHRoZSBtYXAsIGluaXRpYWxpemUgaXQgd2l0aCBhIGNvdW50IG9mIDFcclxuXHRcdFx0XHRmaWxlRGF0ZU1vbnRoTWFwLnNldChmb3JtYXR0ZWREYXRlLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fSovXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgbW9kIGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdGNvbnN0IG1vZGlmaWNhdGlvbkRhdGVzID0gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBidWlsZCBDaGFydCBTdHJpbmcgY3JlYXRlZFxyXG5cdFx0LypsZXQgY2hhclN0cmluZ0NyZWF0ZWQgPSBcIlwiXHJcblx0XHRmb3IgKGNvbnN0IFt2YWx1ZV0gb2YgZmlsZURhdGVNb250aE1hcCkge1xyXG5cdFx0XHRjaGFyU3RyaW5nQ3JlYXRlZCA9IGNoYXJTdHJpbmdDcmVhdGVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdDcmVhdGVkID0gY2hhclN0cmluZ0NyZWF0ZWQuc2xpY2UoMCxjaGFyU3RyaW5nQ3JlYXRlZC5sZW5ndGgtMikqL1xyXG5cclxuXHRcdC8vIGJ1aWxkIENoYXJ0IFN0cmluZyBtb2RpZmllZFxyXG5cdFx0bGV0IGNoYXJTdHJpbmdNb2RpZmllZCA9IFwiXCJcclxuXHRcdGZvciAoY29uc3QgW3ZhbHVlXSBvZiBmaWxlRGF0ZU1vbnRoTWFwTW9kKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGtleTogJHtrZXl9LCB2YWx1ZTogJHt2YWx1ZX1gKTtcclxuXHRcdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkICsgdmFsdWUgKyBcIiwgXCJcclxuXHRcdH1cclxuXHRcdGNoYXJTdHJpbmdNb2RpZmllZCA9IGNoYXJTdHJpbmdNb2RpZmllZC5zbGljZSgwLGNoYXJTdHJpbmdNb2RpZmllZC5sZW5ndGgtMilcclxuXHJcblx0XHRyZXR1cm4gY3JlYXRlQ2hhcnRGb3JtYXQoeUxhYmVsLCBjaGFyU3RyaW5nTW9kaWZpZWQsIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIGRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbDogUHJvbWlzZTxib29sZWFuPil7XHJcblx0XHRuZXdMZXZlbC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pPT4ge1xyXG5cdFx0XHRpZihyZXN1bHQpe1xyXG5cdFx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKHRoaXMuc2V0dGluZ3Muc3RhdHVzTGV2ZWwsIGZhbHNlKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UoYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApXHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhgYmFkZ2UgZm9yIGxldmVsICR7dGhpcy5zZXR0aW5ncy5zdGF0dXNMZXZlbH0gaXMgJHtiYWRnZS5uYW1lfSAtICR7YmFkZ2UubGV2ZWx9YClcclxuXHRcdFx0XHR0aGlzLmdpdmVCYWRnZUluUHJvZmlsZSh0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lLCBiYWRnZSlcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSAxO1xyXG5cdFx0XHRcdHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVtb3ZlS2V5c0Zyb21Gcm9udG1hdHRlcigpIHtcclxuXHRcdC8vY29uc3QgeyBWYXVsdCwgVEZpbGUgfSA9IHdpbmRvdy5hcHA7XHJcblx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcFxyXG5cdFx0Ly9jb25zdCB2YXVsdCA9IFZhdWx0LnJlb3BlbigpO1xyXG5cclxuXHRcdC8vIEdldCBhbGwgTWFya2Rvd24gZmlsZXMgaW4gdGhlIHZhdWx0XHJcblx0XHQvL2NvbnN0IG1hcmtkb3duRmlsZXMgPSB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXAgPSBhd2FpdCBnZXRGaWxlQ291bnRNYXAodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MudGFnc0V4Y2x1ZGUsIHRoaXMuc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSk7XHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcC5rZXlzKCkpIHtcclxuXHRcdFx0Y29uc3QgZmlsZXMgPSB2YXVsdC5nZXRGaWxlcygpO1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZXMuZmluZChmaWxlID0+IGZpbGUuYmFzZW5hbWUgPT09IGZpbGVOYW1lKTtcclxuXHRcdFx0aWYgKCFmaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGBGaWxlICR7ZmlsZU5hbWV9IG5vdCBmb3VuZC5gKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL2NvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWV9YCk7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIG5ldyBOb3RpY2UoYFJlbW92ZWQgc3BlY2lmaWVkIGtleXMgZnJvbSBmcm9udG1hdHRlciBmcm9tIGZpbGUgXFxcIiR7ZmlsZU5hbWV9XFxcIi5gKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHdoaWNoTGV2ZWxOZXh0QmFkZ2UoY3VycmVudExldmVsOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj57XHJcblx0XHRsZXQgbmV4dEJhZGdlTGV2ZWwgPSAwXHJcblx0XHRmb3IgKGxldCBpID0gY3VycmVudExldmVsOyBpIDwgMTEwOyBpKyspe1xyXG5cdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChpLCB0cnVlKVxyXG5cdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdGNvbnN0IG1hdGNoID0gYmFkZ2UubGV2ZWwubWF0Y2gobGV2ZWxSZWdleCk7XHJcblx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBjdXJyZW50TGV2ZWwgJiYgbmV4dEJhZGdlTGV2ZWwgPT0gMCApIHtcclxuXHRcdFx0XHRcdG5leHRCYWRnZUxldmVsID0gbGV2ZWxOdW1iZXI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV4dEJhZGdlTGV2ZWxcclxuXHR9XHJcblxyXG5cdGFzeW5jIGJvb3N0ZXJGb3JJbml0KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcblx0XHRjb25zdCBuZXh0QmFkZ2VBdCA9IGF3YWl0IHRoaXMud2hpY2hMZXZlbE5leHRCYWRnZSh0aGlzLnNldHRpbmdzLnN0YXR1c0xldmVsKVxyXG5cdFx0Y29uc3Qgc3RhdHVzUG9pbnRzVG9SZWFjaCA9IHN0YXR1c1BvaW50c0ZvckxldmVsKG5leHRCYWRnZUF0KVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgc3RhdHVzUG9pbnRzVG9SZWFjaCBmb3IgbmV4dCBCYWRnZTogJHtzdGF0dXNQb2ludHNUb1JlYWNofWApXHJcblx0XHQvLyA1MCBOb3RlcyBmcm9tIExldmVsIDEgdG8gNSB0byBnZXQgdGhlIGZpcnN0IGJhZGdlLlxyXG5cdFx0Ly8gMzAwIFBvaW50cyBpbiBhdmVyYWdlIGZvciBhIE5vdGUuXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gTWF0aC5yb3VuZCgoc3RhdHVzUG9pbnRzVG9SZWFjaCAtIHRoaXMuc2V0dGluZ3Muc3RhdHVzUG9pbnRzKS81MC8zMDApO1xyXG5cdFx0dGhpcy5zZXR0aW5ncy5iYWRnZUJvb3N0ZXJGYWN0b3IgPSBib29zdGVyRmFjdG9yXHJcblx0XHR0aGlzLnNldHRpbmdzLmJhZGdlQm9vc3RlclN0YXRlID0gdHJ1ZVxyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgYm9vc3RlckZha3RvcjogJHtib29zdGVyRmFjdG9yfWApXHJcblx0XHRyZXR1cm4gYm9vc3RlckZhY3RvclxyXG5cdH1cclxuXHJcblx0YXN5bmMgb3BlbkF2YXRhckZpbGUoKSB7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke3RoaXMuc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWV9Lm1kYCk7XHJcblx0XHRpZiAoZXhpc3RpbmdGaWxlKXtcclxuXHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk/LnBhdGggfHwgJyc7XHJcblx0XHRcdGF3YWl0IGFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGV4aXN0aW5nRmlsZS5wYXRoLCBzb3VyY2VQYXRoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwiRmlsZSBub3QgZm91bmQgb3IgdW5hYmxlIHRvIG9wZW4uXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpc1NhbWVEYXkoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBjdXJyZW50RGF0ZSA9IHdpbmRvdy5tb21lbnQoKTsgLy8gR2V0IHRoZSBjdXJyZW50IGRhdGVcclxuXHRyZXR1cm4gY3VycmVudERhdGUuaXNTYW1lKGlucHV0RGF0ZSwgJ2RheScpOyAvLyBDaGVjayBpZiB0aGV5IGFyZSB0aGUgc2FtZSBkYXlcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPbmVEYXlCZWZvcmUoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBvbmVEYXlCZWZvcmVDdXJyZW50ID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKTsgLy8gQ2FsY3VsYXRlIG9uZSBkYXkgYmVmb3JlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBpbnB1dERhdGUuaXNTYW1lKG9uZURheUJlZm9yZUN1cnJlbnQsICdkYXknKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXZhdGFyRmlsZShhcHA6IEFwcCwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG5cdC8vc2V0dGluZ3M6IEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzO1xyXG5cdC8vIERlZmluZSB0aGUgZmlsZSBuYW1lIGFuZCBjb250ZW50XHJcblx0Ly9jb25zdCBmaWxlTmFtZSA9ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nOyAvLyB0aGlzLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lO1xyXG5cdC8vY29uc29sZS5sb2coYGZpbGVOYW1lOiAke2ZpbGVOYW1lfWApXHJcblxyXG5cdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7ZmlsZU5hbWV9Lm1kYCk7XHJcblx0aWYgKGV4aXN0aW5nRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2ZpbGVOYW1lfS5tZCBhbHJlYWR5IGV4aXN0c2ApO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHQvLyBDcmVhdGUgdGhlIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHZhdWx0XHJcblx0YXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShgJHtmaWxlTmFtZX0ubWRgLCBhdmF0YXJJbml0Q29udGVudCk7XHJcblxyXG59XHJcblxyXG5cclxuY2xhc3MgTW9kYWxJbmZvcm1hdGlvbmJveCBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmc7IC8vIFN0b3JlIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZGlzcGxheVRleHQ6IHN0cmluZykge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dDsgLy8gU3RvcmUgdGhlIHBhc3NlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5zZXRUZXh0KHRoaXMuZGlzcGxheVRleHQpOyAvLyBVc2UgdGhlIHN0b3JlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlRm9ybWF0U3RyaW5ncyhsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpIHtcclxuXHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHJcblx0aWYgKCFhY3RpdmVWaWV3KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gYWN0aXZlIE1hcmtkb3duIHZpZXcgZm91bmQuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgZWRpdG9yID0gYWN0aXZlVmlldy5lZGl0b3I7XHJcblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cclxuXHRpZiAoIXNlbGVjdGVkVGV4dCkge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIk5vIHRleHQgc2VsZWN0ZWQgKGZvciBwcm9ncmVzc2l2ZSBzdW1tYXJpemF0aW9uIHN3aXRjaCBMYXllciAyICYgMykuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0bGV0IHJlcGxhY2VkVGV4dCA9IHNlbGVjdGVkVGV4dC5yZXBsYWNlQWxsKGxheWVyMiwgXCJcdTAwQTdcdTAwQTdcdTAwQTdcdTAwQTdcIik7XHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIzLCBcIlx1MjBBQ1x1MjBBQ1x1MjBBQ1x1MjBBQ1wiKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIsIGxheWVyMilcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiLCBsYXllcjMpXHJcblxyXG5cdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHJlcGxhY2VkVGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IG51bWJlciB7XHJcblx0bGV0IHJhdGluZ0Zha3RvcjogbnVtYmVyXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSByYXRpbmdOZXcgLSBwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMClcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nRmFrdG9yID0gMFxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ0Zha3RvclxyXG59XHJcblxyXG5cclxuXHJcbiAgXHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4iLCAiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgZ2FtaWZpY2F0aW9uIGZyb20gJy4vbWFpbic7XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBQYXJ0aWFsPElTZXR0aW5ncz4gPSB7XHJcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHRydWUsXHJcbiAgYmluZEVudGVyOiB0cnVlLFxyXG4gIGJpbmRUYWI6IHRydWUsXHJcbiAgYXZhdGFyUGFnZU5hbWU6ICdBdmF0YXIgLSBHYW1pZmljYXRpb24nLFxyXG4gIHRhZ3NFeGNsdWRlOiAnJyxcclxuICBmb2xkZXJFeGNsdWRlOiAnRXhjYWxpZHJhdycsXHJcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6ICc9PScsXHJcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6ICcqKicsXHJcbiAgbnVtQWxsRmlsZXM6IDEsXHJcbiAgbnVtQWxsRmlsZXNDb3VudDogMCxcclxuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiAwLFxyXG4gIHN0YXR1c1BvaW50czogMCxcclxuICBzdGF0dXNMZXZlbDogMSxcclxuICB4cEZvck5leHRMZXZlbDogMTAwMCxcclxuICBnYW1pZmljYXRpb25TdGFydERhdGU6ICcxMi4wOC4yMDIzJyxcclxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogZmFsc2UsXHJcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiAxLFxyXG4gIGRlYnVnOiBmYWxzZSxcclxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IDAsXHJcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXHJcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogMCxcclxuICB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiAnMTIuMDguMjAyMycsXHJcbiAgc3RyZWFrYm9vc3RlcjogMCxcclxuICBzdHJlYWtib29zdGVyRGF0ZTogZmFsc2UsXHJcbn07XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTZXR0aW5ncyB7XHJcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IGJvb2xlYW47XHJcbiAgYmluZEVudGVyOiBib29sZWFuO1xyXG4gIGJpbmRUYWI6IGJvb2xlYW47XHJcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcclxuICB0YWdzRXhjbHVkZTogc3RyaW5nO1xyXG4gIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcclxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xyXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XHJcbiAgbnVtQWxsRmlsZXM6IG51bWJlcjtcclxuICBudW1BbGxGaWxlc0NvdW50OiBudW1iZXI7XHJcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyO1xyXG4gIHN0YXR1c1BvaW50czogbnVtYmVyO1xyXG4gIHN0YXR1c0xldmVsOiBudW1iZXI7XHJcbiAgeHBGb3JOZXh0TGV2ZWw6IG51bWJlcjtcclxuICBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcclxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogYm9vbGVhbjtcclxuICBiYWRnZUJvb3N0ZXJGYWN0b3I6IG51bWJlcjtcclxuICBkZWJ1ZzogYm9vbGVhbjtcclxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IG51bWJlcjtcclxuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcclxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XHJcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xyXG4gIHN0cmVha2Jvb3N0ZXI6IG51bWJlcjtcclxuICBzdHJlYWtib29zdGVyRGF0ZTogYm9vbGVhbjtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBnYW1pZmljYXRpb247XHJcbiAgXHJcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBib29sZWFuO1xyXG4gIHB1YmxpYyBiaW5kRW50ZXI6IGJvb2xlYW47XHJcbiAgcHVibGljIGJpbmRUYWI6IGJvb2xlYW47XHJcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XHJcbiAgcHVibGljIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcclxuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcclxuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcclxuICBwdWJsaWMgbnVtQWxsRmlsZXM6IG51bWJlcjtcclxuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogbnVtYmVyO1xyXG4gIHB1YmxpYyBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBudW1iZXI7XHJcbiAgcHVibGljIHN0YXR1c1BvaW50czogbnVtYmVyO1xyXG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogbnVtYmVyO1xyXG4gIHB1YmxpYyB4cEZvck5leHRMZXZlbDogbnVtYmVyO1xyXG4gIHB1YmxpYyBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcclxuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IGJvb2xlYW47XHJcbiAgcHVibGljIGJhZGdlQm9vc3RlckZhY3RvcjogbnVtYmVyO1xyXG4gIHB1YmxpYyBkZWJ1ZzogYm9vbGVhbjtcclxuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XHJcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xyXG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBudW1iZXI7XHJcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcclxuICBwdWJsaWMgc3RyZWFrYm9vc3RlcjogbnVtYmVyO1xyXG4gIHB1YmxpYyBzdHJlYWtib29zdGVyRGF0ZTogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogZ2FtaWZpY2F0aW9uKSB7XHJcblx0ICBzdXBlcihhcHAsIHBsdWdpbik7XHJcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuXHR9XHJcbiAgXHJcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XHJcblx0XHRjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGFpbmVyRWwuYWRkQ2xhc3MoXCJleGNhbGlkcmF3LXNldHRpbmdzXCIpO1xyXG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xyXG5cclxuXHRcdGNvbnN0IGNvZmZlZURpdiA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdihcImNvZmZlZVwiKTtcclxuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XHJcblx0XHRjb25zdCBjb2ZmZWVMaW5rID0gY29mZmVlRGl2LmNyZWF0ZUVsKFwiYVwiLCB7XHJcblx0XHRocmVmOiBcImh0dHBzOi8va28tZmkuY29tL2FuZHJlYXN0cmViaW5nXCIsXHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IGNvZmZlZUltZyA9IGNvZmZlZUxpbmsuY3JlYXRlRWwoXCJpbWdcIiwge1xyXG5cdFx0YXR0cjoge1xyXG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXHJcblx0XHR9LFxyXG5cdFx0fSk7XHJcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XHJcblxyXG5cdFx0Ly9jb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xyXG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xyXG4gIFxyXG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnR2FtaWZ5IHlvdXIgUEtNIC0gU2V0dGluZ3MnIH0pO1xyXG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoJyN0YWdzIHRvIGlnbm9yZScpXHJcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxyXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcclxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgdGFnMSwgdGFnMi9zdWJ0YWcsIFx1MjAyNicpXHJcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlKVxyXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlID0gdmFsdWU7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHR9KSk7XHJcblxyXG5cdFx0XHRcdFxyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHRcdC5zZXROYW1lKCdmb2xkZXIgdG8gaWdub3JlJylcclxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxyXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcclxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgZm9sZGVyMSwgZm9sZGVyMiwgXHUyMDI2JylcclxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSlcclxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XHJcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlID0gdmFsdWU7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHR9KSk7XHJcblxyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHRcdC5zZXROYW1lKCdQcm9maWxlIFBhZ2UgTmFtZScpXHJcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSBoZXJlIHRoZSBuYW1lIG9mIHlvdXIgcHJvZmlsZSBwYWdlIGlmIHlvdSBsaWtlLicpXHJcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxyXG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCduYW1lJylcclxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcclxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdPdGhlciBTZXR0aW5ncycgfSk7XHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcclxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gcmVtb3ZlIHRoZSBpbml0IGNvbW1hbmQgZnJvbSBjb21tYW5kIHByb21wdCBieSBzd2l0Y2hpbmcgb2ZmLlxcbnJlc3RhcnQgbmVlZGVkLicpXHJcblx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4gXHJcblx0XHRcdFx0dG9nZ2xlXHJcbiAgICAgICAgICBcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kKVxyXG4gICAgICAgIFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSW5pdENvbW1hbmQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgXHRcdFx0fSksXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoJ2xpbWl0IHRoZSB2aXNpYmxlIG1vbnRoIGluIHRoZSBjaGFydCBvbiB5b3VyIGF2YXRhciBwYWdlOiAnICsgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcblx0XHRcdC5zZXREZXNjKCdpZiAwLCBhbGwgbW9udGggd2lsbCBiZSBzaG93bi4gRW50ZXIgYSBudW1iZXIgaG93IG1hbnkgbW9udGggc2hhbGwgYmUgc2hvd24uJylcclxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XHJcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ051bWJlciBvZiBNb250aCB0byBzaG93JylcclxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFJlZHV6aWVydW5nTW9uYXRlLnRvU3RyaW5nKCkpXHJcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmNoYXJ0UmVkdXppZXJ1bmdNb25hdGUgPSBwYXJzZUludCh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdH0pKTtcclxuXHJcbiAgXHJcblxyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHRcdC5zZXROYW1lKCdQcm9ncmVzc2l2ZSBTdW1tYXJpemF0aW9uJylcclxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIHdoaWNoIGZvcm1hdHRpbmcgeW91IHVzZSBmb3IgTGF5ZXIgMiBhbmQgMy4nKVxyXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcclxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMiBpcyB1c3VhbGx5ICoqJylcclxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMilcclxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMiA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHR9KSlcclxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XHJcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0xheWVyIDMgaXMgdXN1YWxseSA9PScpXHJcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpXHJcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdH0pKTtcclxuXHJcblx0fVxyXG4gIH0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWlyZWRBcmdzKHJlcXVpcmVkLCBhcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA8IHJlcXVpcmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihyZXF1aXJlZCArICcgYXJndW1lbnQnICsgKHJlcXVpcmVkID4gMSA/ICdzJyA6ICcnKSArICcgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmdzLmxlbmd0aCArICcgcHJlc2VudCcpO1xuICB9XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBkYXRlP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLiBUaGUgZnVuY3Rpb24gd29ya3MgZm9yIGRhdGVzIHRyYW5zZmVycmVkIGFjcm9zcyBpZnJhbWVzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRhdGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGEgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZSgpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoTmFOKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3Igc29tZSB2YWx1ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSgnMjAxNC0wMi0zMScpXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBvYmplY3Q6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoe30pXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCBfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGFyZ1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCk7XG5cbiAgLy8gQ2xvbmUgdGhlIGRhdGVcbiAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgRGF0ZSB8fCBfdHlwZW9mKGFyZ3VtZW50KSA9PT0gJ29iamVjdCcgJiYgYXJnU3RyID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdudW1iZXInIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgTnVtYmVyXScpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IFN0cmluZ10nKSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXCJTdGFydGluZyB3aXRoIHYyLjAuMC1iZXRhLjEgZGF0ZS1mbnMgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyBhcyBkYXRlIGFyZ3VtZW50cy4gUGxlYXNlIHVzZSBgcGFyc2VJU09gIHRvIHBhcnNlIHN0cmluZ3MuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI3N0cmluZy1hcmd1bWVudHNcIik7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cbn0iLCAiaW1wb3J0IGlzRGF0ZSBmcm9tIFwiLi4vaXNEYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzVmFsaWRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdmFsaWQ/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGZhbHNlIGlmIGFyZ3VtZW50IGlzIEludmFsaWQgRGF0ZSBhbmQgdHJ1ZSBvdGhlcndpc2UuXG4gKiBBcmd1bWVudCBpcyBjb252ZXJ0ZWQgdG8gRGF0ZSB1c2luZyBgdG9EYXRlYC4gU2VlIFt0b0RhdGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlfVxuICogSW52YWxpZCBEYXRlIGlzIGEgRGF0ZSwgd2hvc2UgdGltZSB2YWx1ZSBpcyBOYU4uXG4gKlxuICogVGltZSB2YWx1ZSBvZiBEYXRlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjkuMS4xXG4gKlxuICogQHBhcmFtIHsqfSBkYXRlIC0gdGhlIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZSBpcyB2YWxpZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoMjAxNCwgMSwgMzEpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsdWUsIGNvbnZlcnRhYmxlIGludG8gYSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZCgxMzkzODA0ODAwMDAwKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgnJykpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVmFsaWQoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICBpZiAoIWlzRGF0ZShkaXJ0eURhdGUpICYmIHR5cGVvZiBkaXJ0eURhdGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHJldHVybiAhaXNOYU4oTnVtYmVyKGRhdGUpKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn0iLCAiaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgYWRkTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZE1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjMwLjc1MFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufSIsICJpbXBvcnQgYWRkTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9hZGRNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdWJNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgc3VidHJhY3RlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA3NTAgbWlsbGlzZWNvbmRzIGZyb20gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1Yk1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjI5LjI1MFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCAtYW1vdW50KTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fREFZID0gODY0MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENEYXlPZlllYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mWWVhclRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICB2YXIgZGlmZmVyZW5jZSA9IHRpbWVzdGFtcCAtIHN0YXJ0T2ZZZWFyVGltZXN0YW1wO1xuICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gTUlMTElTRUNPTkRTX0lOX0RBWSkgKyAxO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gMTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENGdWxsWWVhcih5ZWFyICsgMSwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHllYXIgPSBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5ID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDSVNPV2VlayhkYXRlKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGF0ZSkuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJ2YXIgZGVmYXVsdE9wdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXdPcHRpb25zO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGZpcnN0V2Vla09mTmV4dFllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENGdWxsWWVhcih5ZWFyICsgMSwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mTmV4dFllYXIsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZlRoaXNZZWFyLCBvcHRpb25zKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcbiAgdmFyIHllYXIgPSBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vlay5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWsuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrLCBvcHRpb25zKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENXZWVrKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIsIHRhcmdldExlbmd0aCkge1xuICB2YXIgc2lnbiA9IG51bWJlciA8IDAgPyAnLScgOiAnJztcbiAgdmFyIG91dHB1dCA9IE1hdGguYWJzKG51bWJlcikudG9TdHJpbmcoKTtcbiAgd2hpbGUgKG91dHB1dC5sZW5ndGggPCB0YXJnZXRMZW5ndGgpIHtcbiAgICBvdXRwdXQgPSAnMCcgKyBvdXRwdXQ7XG4gIH1cbiAgcmV0dXJuIHNpZ24gKyBvdXRwdXQ7XG59IiwgImltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKi9cbnZhciBmb3JtYXR0ZXJzID0ge1xuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4pIHtcbiAgICAvLyBGcm9tIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtMzEvdHIzNS1kYXRlcy5odG1sI0RhdGVfRm9ybWF0X3Rva2Vuc1xuICAgIC8vIHwgWWVhciAgICAgfCAgICAgeSB8IHl5IHwgICB5eXkgfCAgeXl5eSB8IHl5eXl5IHxcbiAgICAvLyB8LS0tLS0tLS0tLXwtLS0tLS0tfC0tLS18LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS18XG4gICAgLy8gfCBBRCAxICAgICB8ICAgICAxIHwgMDEgfCAgIDAwMSB8ICAwMDAxIHwgMDAwMDEgfFxuICAgIC8vIHwgQUQgMTIgICAgfCAgICAxMiB8IDEyIHwgICAwMTIgfCAgMDAxMiB8IDAwMDEyIHxcbiAgICAvLyB8IEFEIDEyMyAgIHwgICAxMjMgfCAyMyB8ICAgMTIzIHwgIDAxMjMgfCAwMDEyMyB8XG4gICAgLy8gfCBBRCAxMjM0ICB8ICAxMjM0IHwgMzQgfCAgMTIzNCB8ICAxMjM0IHwgMDEyMzQgfFxuICAgIC8vIHwgQUQgMTIzNDUgfCAxMjM0NSB8IDQ1IHwgMTIzNDUgfCAxMjM0NSB8IDEyMzQ1IHxcblxuICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRva2VuID09PSAneXknID8geWVhciAlIDEwMCA6IHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSAnTScgPyBTdHJpbmcobW9udGggKyAxKSA6IGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDRGF0ZSgpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0VVRDSG91cnMoKSAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTtcbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gJ2FtJyA/ICdhLm0uJyA6ICdwLm0uJztcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ01pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHZhciBudW1iZXJPZkRpZ2l0cyA9IHRva2VuLmxlbmd0aDtcbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgICB2YXIgZnJhY3Rpb25hbFNlY29uZHMgPSBNYXRoLmZsb29yKG1pbGxpc2Vjb25kcyAqIE1hdGgucG93KDEwLCBudW1iZXJPZkRpZ2l0cyAtIDMpKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGZyYWN0aW9uYWxTZWNvbmRzLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAiaW1wb3J0IGdldFVUQ0RheU9mWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENEYXlPZlllYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENJU09XZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbmltcG9ydCBsaWdodEZvcm1hdHRlcnMgZnJvbSBcIi4uL2xpZ2h0Rm9ybWF0dGVycy9pbmRleC5qc1wiO1xudmFyIGRheVBlcmlvZEVudW0gPSB7XG4gIGFtOiAnYW0nLFxuICBwbTogJ3BtJyxcbiAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gIG5vb246ICdub29uJyxcbiAgbW9ybmluZzogJ21vcm5pbmcnLFxuICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICBldmVuaW5nOiAnZXZlbmluZycsXG4gIG5pZ2h0OiAnbmlnaHQnXG59O1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgTWlsbGlzZWNvbmRzIGluIGRheSAgICAgICAgICAgIHxcbiAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAqIHwgIGMgIHwgU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsgIHwgIEMqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGYgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEYqIHwgRGF5IG9mIHdlZWsgaW4gbW9udGggICAgICAgICAgIHxcbiAqIHwgIGcqIHwgTW9kaWZpZWQgSnVsaWFuIGRheSAgICAgICAgICAgIHwgIEcgIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGkhIHwgSVNPIGRheSBvZiB3ZWVrICAgICAgICAgICAgICAgIHwgIEkhIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgIHxcbiAqIHwgIGoqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHwgIEoqIHwgTG9jYWxpemVkIGhvdXIgdy9vIGRheSBwZXJpb2QgIHxcbiAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGwqIHwgKGRlcHJlY2F0ZWQpICAgICAgICAgICAgICAgICAgIHwgIEwgIHwgU3RhbmQtYWxvbmUgbW9udGggICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG8hIHwgT3JkaW5hbCBudW1iZXIgbW9kaWZpZXIgICAgICAgIHwgIE8gIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHAhIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgIHwgIFAhIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgIHxcbiAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHIqIHwgUmVsYXRlZCBHcmVnb3JpYW4geWVhciAgICAgICAgIHwgIFIhIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAqIHwgIHUgIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgIHwgIFUqIHwgQ3ljbGljIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHYqIHwgVGltZXpvbmUgKGdlbmVyaWMgbm9uLWxvY2F0LikgIHwgIFYqIHwgVGltZXpvbmUgKGxvY2F0aW9uKSAgICAgICAgICAgIHxcbiAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHggIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgIHwgIFggIHwgVGltZXpvbmUgKElTTy04NjAxKSAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgIHxcbiAqIHwgIHogIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgISBhcmUgbm9uLXN0YW5kYXJkLCBidXQgaW1wbGVtZW50ZWQgYnkgZGF0ZS1mbnM6XG4gKiAtIGBvYCBtb2RpZmllcyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gdHVybiBpdCBpbnRvIGFuIG9yZGluYWwgKHNlZSBgZm9ybWF0YCBkb2NzKVxuICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICogICBpLmUuIDcgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gKiAtIGBJYCBpcyBJU08gd2VlayBvZiB5ZWFyLCBhcyBvcHBvc2VkIHRvIGB3YCB3aGljaCBpcyBsb2NhbCB3ZWVrIG9mIHllYXIuXG4gKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqICAgYFJgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSWAgYW5kIGBpYFxuICogICBmb3IgdW5pdmVyc2FsIElTTyB3ZWVrLW51bWJlcmluZyBkYXRlLCB3aGVyZWFzXG4gKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAqICAgZm9yIHdlZWstbnVtYmVyaW5nIGRhdGUgc3BlY2lmaWMgdG8gdGhlIGxvY2FsZS5cbiAqIC0gYFBgIGlzIGxvbmcgbG9jYWxpemVkIGRhdGUgZm9ybWF0XG4gKiAtIGBwYCBpcyBsb25nIGxvY2FsaXplZCB0aW1lIGZvcm1hdFxuICovXG5cbnZhciBmb3JtYXR0ZXJzID0ge1xuICAvLyBFcmFcbiAgRzogZnVuY3Rpb24gRyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZXJhID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpID4gMCA/IDEgOiAwO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEFELCBCQ1xuICAgICAgY2FzZSAnRyc6XG4gICAgICBjYXNlICdHRyc6XG4gICAgICBjYXNlICdHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQSwgQlxuICAgICAgY2FzZSAnR0dHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93J1xuICAgICAgICB9KTtcbiAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0XG4gICAgICBjYXNlICdHR0dHJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ3lvJykge1xuICAgICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHllYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICBZOiBmdW5jdGlvbiBZKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBzaWduZWRXZWVrWWVhciA9IGdldFVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgdmFyIHdlZWtZZWFyID0gc2lnbmVkV2Vla1llYXIgPiAwID8gc2lnbmVkV2Vla1llYXIgOiAxIC0gc2lnbmVkV2Vla1llYXI7XG5cbiAgICAvLyBUd28gZGlnaXQgeWVhclxuICAgIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgICAgdmFyIHR3b0RpZ2l0WWVhciA9IHdlZWtZZWFyICUgMTAwO1xuICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0d29EaWdpdFllYXIsIDIpO1xuICAgIH1cblxuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAnWW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrWWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICBSOiBmdW5jdGlvbiBSKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGlzb1dlZWtZZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGF0ZSk7XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRXh0ZW5kZWQgeWVhci4gVGhpcyBpcyBhIHNpbmdsZSBudW1iZXIgZGVzaWduYXRpbmcgdGhlIHllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0uXG4gIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBsb2NhbGl6ZXJzIGFyZSBCLkMuIHllYXJzOlxuICAvLyB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICAvLyB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICAvLyB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICAvLyB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICAvLyB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICAvLyBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gIC8vIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZC5cbiAgdTogZnVuY3Rpb24gdShkYXRlLCB0b2tlbikge1xuICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gUXVhcnRlclxuICBROiBmdW5jdGlvbiBRKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ1EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ1FRJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAnUW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ1FRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ1FRUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAnUVFRUSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBxdWFydGVyXG4gIHE6IGZ1bmN0aW9uIHEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAncSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAncXEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdxbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAncXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAncXFxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdxcXFxJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ00nOlxuICAgICAgY2FzZSAnTU0nOlxuICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLk0oZGF0ZSwgdG9rZW4pO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdNTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ01NTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdNTU1NJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgbW9udGhcbiAgTDogZnVuY3Rpb24gTChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTEwnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdMbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ0xMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTExMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ0xMTEwnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCB3ZWVrIG9mIHllYXJcbiAgdzogZnVuY3Rpb24gdyhkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2VlayA9IGdldFVUQ1dlZWsoZGF0ZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRva2VuID09PSAnd28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWsgb2YgeWVhclxuICBJOiBmdW5jdGlvbiBJKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBpc29XZWVrID0gZ2V0VVRDSVNPV2VlayhkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdJbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb1dlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnZG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0RhdGUoKSwge1xuICAgICAgICB1bml0OiAnZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBEYXkgb2YgeWVhclxuICBEOiBmdW5jdGlvbiBEKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZlllYXIgPSBnZXRVVENEYXlPZlllYXIoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnRG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXlPZlllYXIsIHtcbiAgICAgICAgdW5pdDogJ2RheU9mWWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRheU9mWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHdlZWtcbiAgRTogZnVuY3Rpb24gRShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ0UnOlxuICAgICAgY2FzZSAnRUUnOlxuICAgICAgY2FzZSAnRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdFRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ0VFRUUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIGRheSBvZiB3ZWVrXG4gIGU6IGZ1bmN0aW9uIGUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pXG4gICAgICBjYXNlICdlJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdlZSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlICdlbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2VlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2VlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnZWVlZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWtcbiAgYzogZnVuY3Rpb24gYyhkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKVxuICAgICAgY2FzZSAnYyc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnY2MnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlICdjbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2NjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnY2NjYyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uIGkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMlxuICAgICAgY2FzZSAnaSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTtcbiAgICAgIC8vIDAyXG4gICAgICBjYXNlICdpaSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMm5kXG4gICAgICBjYXNlICdpbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb0RheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ2lpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ2lpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnaWlpaSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNLCBQTSwgbWlkbmlnaHQsIG5vb25cbiAgYjogZnVuY3Rpb24gYihkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPT09IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA9PT0gMCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5taWRuaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2InOlxuICAgICAgY2FzZSAnYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2JiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlICdiYmJiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2JiYmInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHRcbiAgQjogZnVuY3Rpb24gQihkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPj0gMTcpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uZXZlbmluZztcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmFmdGVybm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDQpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubW9ybmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5uaWdodDtcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnQic6XG4gICAgICBjYXNlICdCQic6XG4gICAgICBjYXNlICdCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdobycpIHtcbiAgICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdIbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDSG91cnMoKSwge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLkgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTExXVxuICBLOiBmdW5jdGlvbiBLKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgIGlmICh0b2tlbiA9PT0gJ0tvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24gayhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDI0O1xuICAgIGlmICh0b2tlbiA9PT0gJ2tvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnbW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ01pbnV0ZXMoKSwge1xuICAgICAgICB1bml0OiAnbWludXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMubShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ3NvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHtcbiAgICAgICAgdW5pdDogJ3NlY29uZCdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuUyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApXG4gIFg6IGZ1bmN0aW9uIFgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZiAodGltZXpvbmVPZmZzZXQgPT09IDApIHtcbiAgICAgIHJldHVybiAnWic7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICdYJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYYFxuICAgICAgY2FzZSAnWFhYWCc6XG4gICAgICBjYXNlICdYWCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWFhgXG4gICAgICBjYXNlICdYWFhYWCc6XG4gICAgICBjYXNlICdYWFgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpXG4gIHg6IGZ1bmN0aW9uIHgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAneCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eGBcbiAgICAgIGNhc2UgJ3h4eHgnOlxuICAgICAgY2FzZSAneHgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHh4YFxuICAgICAgY2FzZSAneHh4eHgnOlxuICAgICAgY2FzZSAneHh4JzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoR01UKVxuICBPOiBmdW5jdGlvbiBPKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ08nOlxuICAgICAgY2FzZSAnT08nOlxuICAgICAgY2FzZSAnT09PJzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgJ09PT08nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0aW9uKVxuICB6OiBmdW5jdGlvbiB6KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ3onOlxuICAgICAgY2FzZSAnenonOlxuICAgICAgY2FzZSAnenp6JzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgJ3p6enonOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBTZWNvbmRzIHRpbWVzdGFtcFxuICB0OiBmdW5jdGlvbiB0KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IE1hdGguZmxvb3Iob3JpZ2luYWxEYXRlLmdldFRpbWUoKSAvIDEwMDApO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gIFQ6IGZ1bmN0aW9uIFQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gb3JpZ2luYWxEYXRlLmdldFRpbWUoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lU2hvcnQob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKTtcbiAgdmFyIG1pbnV0ZXMgPSBhYnNPZmZzZXQgJSA2MDtcbiAgaWYgKG1pbnV0ZXMgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiArIFN0cmluZyhob3Vycyk7XG4gIH1cbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICByZXR1cm4gc2lnbiArIFN0cmluZyhob3VycykgKyBkZWxpbWl0ZXIgKyBhZGRMZWFkaW5nWmVyb3MobWludXRlcywgMik7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICBpZiAob2Zmc2V0ICUgNjAgPT09IDApIHtcbiAgICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gICAgcmV0dXJuIHNpZ24gKyBhZGRMZWFkaW5nWmVyb3MoTWF0aC5hYnMob2Zmc2V0KSAvIDYwLCAyKTtcbiAgfVxuICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcik7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApLCAyKTtcbiAgdmFyIG1pbnV0ZXMgPSBhZGRMZWFkaW5nWmVyb3MoYWJzT2Zmc2V0ICUgNjAsIDIpO1xuICByZXR1cm4gc2lnbiArIGhvdXJzICsgZGVsaW1pdGVyICsgbWludXRlcztcbn1cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgInZhciBkYXRlTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcbnZhciB0aW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIHRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAncCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwcCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcbnZhciBkYXRlVGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlVGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICB2YXIgbWF0Y2hSZXN1bHQgPSBwYXR0ZXJuLm1hdGNoKC8oUCspKHArKT8vKSB8fCBbXTtcbiAgdmFyIGRhdGVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMV07XG4gIHZhciB0aW1lUGF0dGVybiA9IG1hdGNoUmVzdWx0WzJdO1xuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG4gIHZhciBkYXRlVGltZUZvcm1hdDtcbiAgc3dpdGNoIChkYXRlUGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCd7e2RhdGV9fScsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nKSkucmVwbGFjZSgne3t0aW1lfX0nLCB0aW1lTG9uZ0Zvcm1hdHRlcih0aW1lUGF0dGVybiwgZm9ybWF0TG9uZykpO1xufTtcbnZhciBsb25nRm9ybWF0dGVycyA9IHtcbiAgcDogdGltZUxvbmdGb3JtYXR0ZXIsXG4gIFA6IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlclxufTtcbmV4cG9ydCBkZWZhdWx0IGxvbmdGb3JtYXR0ZXJzOyIsICIvKipcbiAqIEdvb2dsZSBDaHJvbWUgYXMgb2YgNjcuMC4zMzk2Ljg3IGludHJvZHVjZWQgdGltZXpvbmVzIHdpdGggb2Zmc2V0IHRoYXQgaW5jbHVkZXMgc2Vjb25kcy5cbiAqIFRoZXkgdXN1YWxseSBhcHBlYXIgZm9yIGRhdGVzIHRoYXQgZGVub3RlIHRpbWUgYmVmb3JlIHRoZSB0aW1lem9uZXMgd2VyZSBpbnRyb2R1Y2VkXG4gKiAoZS5nLiBmb3IgJ0V1cm9wZS9QcmFndWUnIHRpbWV6b25lIHRoZSBvZmZzZXQgaXMgR01UKzAwOjU3OjQ0IGJlZm9yZSAxIE9jdG9iZXIgMTg5MVxuICogYW5kIEdNVCswMTowMDowMCBhZnRlciB0aGF0IGRhdGUpXG4gKlxuICogRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIHRoZSBvZmZzZXQgaW4gbWludXRlcyBhbmQgd291bGQgcmV0dXJuIDU3IGZvciB0aGUgZXhhbXBsZSBhYm92ZSxcbiAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWV6b25lIG9mZnNldCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0YWtlcyBzZWNvbmRzIGluIGFjY291bnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkge1xuICB2YXIgdXRjRGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCksIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpKTtcbiAgdXRjRGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgLSB1dGNEYXRlLmdldFRpbWUoKTtcbn0iLCAidmFyIHByb3RlY3RlZERheU9mWWVhclRva2VucyA9IFsnRCcsICdERCddO1xudmFyIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zID0gWydZWScsICdZWVlZJ107XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGlmICh0b2tlbiA9PT0gJ1lZWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0QnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRgIGluc3RlYWQgb2YgYERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0REJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfVxufSIsICJ2YXIgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBzZWNvbmQnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICB4U2Vjb25kczoge1xuICAgIG9uZTogJzEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICBoYWxmQU1pbnV0ZTogJ2hhbGYgYSBtaW51dGUnLFxuICBsZXNzVGhhblhNaW51dGVzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgbWludXRlJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6ICcxIG1pbnV0ZScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgYWJvdXRYSG91cnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIGhvdXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4SG91cnM6IHtcbiAgICBvbmU6ICcxIGhvdXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4RGF5czoge1xuICAgIG9uZTogJzEgZGF5JyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBkYXlzJ1xuICB9LFxuICBhYm91dFhXZWVrczoge1xuICAgIG9uZTogJ2Fib3V0IDEgd2VlaycsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIHhXZWVrczoge1xuICAgIG9uZTogJzEgd2VlaycsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogJ2Fib3V0IDEgbW9udGgnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgeE1vbnRoczoge1xuICAgIG9uZTogJzEgbW9udGgnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIHllYXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICB4WWVhcnM6IHtcbiAgICBvbmU6ICcxIHllYXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBvdmVyWFllYXJzOiB7XG4gICAgb25lOiAnb3ZlciAxIHllYXInLFxuICAgIG90aGVyOiAnb3ZlciB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIGFsbW9zdFhZZWFyczoge1xuICAgIG9uZTogJ2FsbW9zdCAxIHllYXInLFxuICAgIG90aGVyOiAnYWxtb3N0IHt7Y291bnR9fSB5ZWFycydcbiAgfVxufTtcbnZhciBmb3JtYXREaXN0YW5jZSA9IGZ1bmN0aW9uIGZvcm1hdERpc3RhbmNlKHRva2VuLCBjb3VudCwgb3B0aW9ucykge1xuICB2YXIgcmVzdWx0O1xuICB2YXIgdG9rZW5WYWx1ZSA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXTtcbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWU7XG4gIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm9uZTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm90aGVyLnJlcGxhY2UoJ3t7Y291bnR9fScsIGNvdW50LnRvU3RyaW5nKCkpO1xuICB9XG4gIGlmIChvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLmFkZFN1ZmZpeCkge1xuICAgIGlmIChvcHRpb25zLmNvbXBhcmlzb24gJiYgb3B0aW9ucy5jb21wYXJpc29uID4gMCkge1xuICAgICAgcmV0dXJuICdpbiAnICsgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgJyBhZ28nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdERpc3RhbmNlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZvcm1hdExvbmdGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIC8vIFRPRE86IFJlbW92ZSBTdHJpbmcoKVxuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICB2YXIgZm9ybWF0ID0gYXJncy5mb3JtYXRzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHNbYXJncy5kZWZhdWx0V2lkdGhdO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH07XG59IiwgImltcG9ydCBidWlsZEZvcm1hdExvbmdGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZEZvcm1hdExvbmdGbi9pbmRleC5qc1wiO1xudmFyIGRhdGVGb3JtYXRzID0ge1xuICBmdWxsOiAnRUVFRSwgTU1NTSBkbywgeScsXG4gIGxvbmc6ICdNTU1NIGRvLCB5JyxcbiAgbWVkaXVtOiAnTU1NIGQsIHknLFxuICBzaG9ydDogJ01NL2RkL3l5eXknXG59O1xudmFyIHRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiAnaDptbTpzcyBhIHp6enonLFxuICBsb25nOiAnaDptbTpzcyBhIHonLFxuICBtZWRpdW06ICdoOm1tOnNzIGEnLFxuICBzaG9ydDogJ2g6bW0gYSdcbn07XG52YXIgZGF0ZVRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbG9uZzogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIG1lZGl1bTogJ3t7ZGF0ZX19LCB7e3RpbWV9fScsXG4gIHNob3J0OiAne3tkYXRlfX0sIHt7dGltZX19J1xufTtcbnZhciBmb3JtYXRMb25nID0ge1xuICBkYXRlOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIHRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiB0aW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgZGF0ZVRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlVGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRMb25nOyIsICJ2YXIgZm9ybWF0UmVsYXRpdmVMb2NhbGUgPSB7XG4gIGxhc3RXZWVrOiBcIidsYXN0JyBlZWVlICdhdCcgcFwiLFxuICB5ZXN0ZXJkYXk6IFwiJ3llc3RlcmRheSBhdCcgcFwiLFxuICB0b2RheTogXCIndG9kYXkgYXQnIHBcIixcbiAgdG9tb3Jyb3c6IFwiJ3RvbW9ycm93IGF0JyBwXCIsXG4gIG5leHRXZWVrOiBcImVlZWUgJ2F0JyBwXCIsXG4gIG90aGVyOiAnUCdcbn07XG52YXIgZm9ybWF0UmVsYXRpdmUgPSBmdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZSh0b2tlbiwgX2RhdGUsIF9iYXNlRGF0ZSwgX29wdGlvbnMpIHtcbiAgcmV0dXJuIGZvcm1hdFJlbGF0aXZlTG9jYWxlW3Rva2VuXTtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRSZWxhdGl2ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRMb2NhbGl6ZUZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkaXJ0eUluZGV4LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLmNvbnRleHQgPyBTdHJpbmcob3B0aW9ucy5jb250ZXh0KSA6ICdzdGFuZGFsb25lJztcbiAgICB2YXIgdmFsdWVzQXJyYXk7XG4gICAgaWYgKGNvbnRleHQgPT09ICdmb3JtYXR0aW5nJyAmJiBhcmdzLmZvcm1hdHRpbmdWYWx1ZXMpIHtcbiAgICAgIHZhciBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRGb3JtYXR0aW5nV2lkdGggfHwgYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2RlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIF93aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy52YWx1ZXNbX3dpZHRoXSB8fCBhcmdzLnZhbHVlc1tfZGVmYXVsdFdpZHRoXTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gYXJncy5hcmd1bWVudENhbGxiYWNrID8gYXJncy5hcmd1bWVudENhbGxiYWNrKGRpcnR5SW5kZXgpIDogZGlydHlJbmRleDtcbiAgICAvLyBAdHMtaWdub3JlOiBGb3Igc29tZSByZWFzb24gVHlwZVNjcmlwdCBqdXN0IGRvbid0IHdhbnQgdG8gbWF0Y2ggaXQsIG5vIG1hdHRlciBob3cgaGFyZCB3ZSB0cnkuIEkgY2hhbGxlbmdlIHlvdSB0byB0cnkgdG8gcmVtb3ZlIGl0IVxuICAgIHJldHVybiB2YWx1ZXNBcnJheVtpbmRleF07XG4gIH07XG59IiwgImltcG9ydCBidWlsZExvY2FsaXplRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRMb2NhbGl6ZUZuL2luZGV4LmpzXCI7XG52YXIgZXJhVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnQicsICdBJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0JDJywgJ0FEJ10sXG4gIHdpZGU6IFsnQmVmb3JlIENocmlzdCcsICdBbm5vIERvbWluaSddXG59O1xudmFyIHF1YXJ0ZXJWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWycxJywgJzInLCAnMycsICc0J10sXG4gIGFiYnJldmlhdGVkOiBbJ1ExJywgJ1EyJywgJ1EzJywgJ1E0J10sXG4gIHdpZGU6IFsnMXN0IHF1YXJ0ZXInLCAnMm5kIHF1YXJ0ZXInLCAnM3JkIHF1YXJ0ZXInLCAnNHRoIHF1YXJ0ZXInXVxufTtcblxuLy8gTm90ZTogaW4gRW5nbGlzaCwgdGhlIG5hbWVzIG9mIGRheXMgb2YgdGhlIHdlZWsgYW5kIG1vbnRocyBhcmUgY2FwaXRhbGl6ZWQuXG4vLyBJZiB5b3UgYXJlIG1ha2luZyBhIG5ldyBsb2NhbGUgYmFzZWQgb24gdGhpcyBvbmUsIGNoZWNrIGlmIHRoZSBzYW1lIGlzIHRydWUgZm9yIHRoZSBsYW5ndWFnZSB5b3UncmUgd29ya2luZyBvbi5cbi8vIEdlbmVyYWxseSwgZm9ybWF0dGVkIGRhdGVzIHNob3VsZCBsb29rIGxpa2UgdGhleSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHNlbnRlbmNlLFxuLy8gZS5nLiBpbiBTcGFuaXNoIGxhbmd1YWdlIHRoZSB3ZWVrZGF5cyBhbmQgbW9udGhzIHNob3VsZCBiZSBpbiB0aGUgbG93ZXJjYXNlLlxudmFyIG1vbnRoVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnSicsICdGJywgJ00nLCAnQScsICdNJywgJ0onLCAnSicsICdBJywgJ1MnLCAnTycsICdOJywgJ0QnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcbiAgd2lkZTogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ11cbn07XG52YXIgZGF5VmFsdWVzID0ge1xuICBuYXJyb3c6IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddLFxuICBzaG9ydDogWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddLFxuICBhYmJyZXZpYXRlZDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcbiAgd2lkZTogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddXG59O1xudmFyIGRheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9XG59O1xudmFyIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfVxufTtcbnZhciBvcmRpbmFsTnVtYmVyID0gZnVuY3Rpb24gb3JkaW5hbE51bWJlcihkaXJ0eU51bWJlciwgX29wdGlvbnMpIHtcbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgLy8gSWYgb3JkaW5hbCBudW1iZXJzIGRlcGVuZCBvbiBjb250ZXh0LCBmb3IgZXhhbXBsZSxcbiAgLy8gaWYgdGhleSBhcmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgZ3JhbW1hdGljYWwgZ2VuZGVycyxcbiAgLy8gdXNlIGBvcHRpb25zLnVuaXRgLlxuICAvL1xuICAvLyBgdW5pdGAgY2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXRlJywgJ2RheU9mWWVhcicsXG4gIC8vICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJy5cblxuICB2YXIgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuICBpZiAocmVtMTAwID4gMjAgfHwgcmVtMTAwIDwgMTApIHtcbiAgICBzd2l0Y2ggKHJlbTEwMCAlIDEwKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnc3QnO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ25kJztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdyZCc7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW1iZXIgKyAndGgnO1xufTtcbnZhciBsb2NhbGl6ZSA9IHtcbiAgb3JkaW5hbE51bWJlcjogb3JkaW5hbE51bWJlcixcbiAgZXJhOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZXJhVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogcXVhcnRlclZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJyxcbiAgICBhcmd1bWVudENhbGxiYWNrOiBmdW5jdGlvbiBhcmd1bWVudENhbGxiYWNrKHF1YXJ0ZXIpIHtcbiAgICAgIHJldHVybiBxdWFydGVyIC0gMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXk6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJyxcbiAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6ICd3aWRlJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsaXplOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoO1xuICAgIHZhciBtYXRjaFBhdHRlcm4gPSB3aWR0aCAmJiBhcmdzLm1hdGNoUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MubWF0Y2hQYXR0ZXJuc1thcmdzLmRlZmF1bHRNYXRjaFdpZHRoXTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2gobWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VQYXR0ZXJucyA9IHdpZHRoICYmIGFyZ3MucGFyc2VQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5wYXJzZVBhdHRlcm5zW2FyZ3MuZGVmYXVsdFBhcnNlV2lkdGhdO1xuICAgIHZhciBrZXkgPSBBcnJheS5pc0FycmF5KHBhcnNlUGF0dGVybnMpID8gZmluZEluZGV4KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pIDogZmluZEtleShwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KTtcbiAgICB2YXIgdmFsdWU7XG4gICAgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2soa2V5KSA6IGtleTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufVxuZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHByZWRpY2F0ZShvYmplY3Rba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBrZXkgPSAwOyBrZXkgPCBhcnJheS5sZW5ndGg7IGtleSsrKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhwYXJzZVJlc3VsdFswXSkgOiBwYXJzZVJlc3VsdFswXTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRNYXRjaEZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qc1wiO1xuaW1wb3J0IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi9pbmRleC5qc1wiO1xudmFyIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcXGQrKSh0aHxzdHxuZHxyZCk/L2k7XG52YXIgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9cXGQrL2k7XG52YXIgbWF0Y2hFcmFQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihifGEpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihiXFwuP1xccz9jXFwuP3xiXFwuP1xccz9jXFwuP1xccz9lXFwuP3xhXFwuP1xccz9kXFwuP3xjXFwuP1xccz9lXFwuPykvaSxcbiAgd2lkZTogL14oYmVmb3JlIGNocmlzdHxiZWZvcmUgY29tbW9uIGVyYXxhbm5vIGRvbWluaXxjb21tb24gZXJhKS9pXG59O1xudmFyIHBhcnNlRXJhUGF0dGVybnMgPSB7XG4gIGFueTogWy9eYi9pLCAvXihhfGMpL2ldXG59O1xudmFyIG1hdGNoUXVhcnRlclBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eWzEyMzRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXnFbMTIzNF0vaSxcbiAgd2lkZTogL15bMTIzNF0odGh8c3R8bmR8cmQpPyBxdWFydGVyL2lcbn07XG52YXIgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7XG4gIGFueTogWy8xL2ksIC8yL2ksIC8zL2ksIC80L2ldXG59O1xudmFyIG1hdGNoTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltqZm1hc29uZF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLFxuICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pXG59O1xudmFyIHBhcnNlTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15qL2ksIC9eZi9pLCAvXm0vaSwgL15hL2ksIC9ebS9pLCAvXmovaSwgL15qL2ksIC9eYS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV0sXG4gIGFueTogWy9eamEvaSwgL15mL2ksIC9ebWFyL2ksIC9eYXAvaSwgL15tYXkvaSwgL15qdW4vaSwgL15qdWwvaSwgL15hdS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV1cbn07XG52YXIgbWF0Y2hEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltzbXR3Zl0vaSxcbiAgc2hvcnQ6IC9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0KS9pLFxuICB3aWRlOiAvXihzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSkvaVxufTtcbnZhciBwYXJzZURheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXnMvaSwgL15tL2ksIC9edC9pLCAvXncvaSwgL150L2ksIC9eZi9pLCAvXnMvaV0sXG4gIGFueTogWy9ec3UvaSwgL15tL2ksIC9edHUvaSwgL153L2ksIC9edGgvaSwgL15mL2ksIC9ec2EvaV1cbn07XG52YXIgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksXG4gIGFueTogL14oW2FwXVxcLj9cXHM/bVxcLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2lcbn07XG52YXIgcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgYW55OiB7XG4gICAgYW06IC9eYS9pLFxuICAgIHBtOiAvXnAvaSxcbiAgICBtaWRuaWdodDogL15taS9pLFxuICAgIG5vb246IC9ebm8vaSxcbiAgICBtb3JuaW5nOiAvbW9ybmluZy9pLFxuICAgIGFmdGVybm9vbjogL2FmdGVybm9vbi9pLFxuICAgIGV2ZW5pbmc6IC9ldmVuaW5nL2ksXG4gICAgbmlnaHQ6IC9uaWdodC9pXG4gIH1cbn07XG52YXIgbWF0Y2ggPSB7XG4gIG9yZGluYWxOdW1iZXI6IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oe1xuICAgIG1hdGNoUGF0dGVybjogbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICBwYXJzZVBhdHRlcm46IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuICB9KSxcbiAgZXJhOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZUVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55JyxcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggKyAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnYW55JyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IG1hdGNoOyIsICJpbXBvcnQgZm9ybWF0RGlzdGFuY2UgZnJvbSBcIi4vX2xpYi9mb3JtYXREaXN0YW5jZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdExvbmcgZnJvbSBcIi4vX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0UmVsYXRpdmUgZnJvbSBcIi4vX2xpYi9mb3JtYXRSZWxhdGl2ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGxvY2FsaXplIGZyb20gXCIuL19saWIvbG9jYWxpemUvaW5kZXguanNcIjtcbmltcG9ydCBtYXRjaCBmcm9tIFwiLi9fbGliL21hdGNoL2luZGV4LmpzXCI7XG4vKipcbiAqIEB0eXBlIHtMb2NhbGV9XG4gKiBAY2F0ZWdvcnkgTG9jYWxlc1xuICogQHN1bW1hcnkgRW5nbGlzaCBsb2NhbGUgKFVuaXRlZCBTdGF0ZXMpLlxuICogQGxhbmd1YWdlIEVuZ2xpc2hcbiAqIEBpc28tNjM5LTIgZW5nXG4gKiBAYXV0aG9yIFNhc2hhIEtvc3MgW0Brb3Nzbm9jb3JwXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20va29zc25vY29ycH1cbiAqIEBhdXRob3IgTGVzaGEgS29zcyBbQGxlc2hha29zc117QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xlc2hha29zc31cbiAqL1xudmFyIGxvY2FsZSA9IHtcbiAgY29kZTogJ2VuLVVTJyxcbiAgZm9ybWF0RGlzdGFuY2U6IGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXRMb25nOiBmb3JtYXRMb25nLFxuICBmb3JtYXRSZWxhdGl2ZTogZm9ybWF0UmVsYXRpdmUsXG4gIGxvY2FsaXplOiBsb2NhbGl6ZSxcbiAgbWF0Y2g6IG1hdGNoLFxuICBvcHRpb25zOiB7XG4gICAgd2Vla1N0YXJ0c09uOiAwIC8qIFN1bmRheSAqLyxcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDFcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsZTsiLCAiaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uLy4uL2xvY2FsZS9lbi1VUy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdExvY2FsZTsiLCAiaW1wb3J0IGlzVmFsaWQgZnJvbSBcIi4uL2lzVmFsaWQvaW5kZXguanNcIjtcbmltcG9ydCBzdWJNaWxsaXNlY29uZHMgZnJvbSBcIi4uL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvZm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGxvbmdGb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbiwgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuLCB0aHJvd1Byb3RlY3RlZEVycm9yIH0gZnJvbSBcIi4uL19saWIvcHJvdGVjdGVkVG9rZW5zL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi9fbGliL2RlZmF1bHRMb2NhbGUvaW5kZXguanNcIjsgLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG52YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcXHcpXFwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuLy8gVGhpcyBSZWdFeHAgY2F0Y2hlcyBzeW1ib2xzIGVzY2FwZWQgYnkgcXVvdGVzLCBhbmQgYWxzb1xuLy8gc2VxdWVuY2VzIG9mIHN5bWJvbHMgUCwgcCwgYW5kIHRoZSBjb21iaW5hdGlvbnMgbGlrZSBgUFBQUFBQUHBwcHBwYFxudmFyIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG52YXIgZXNjYXBlZFN0cmluZ1JlZ0V4cCA9IC9eJyhbXl0qPyknPyQvO1xudmFyIGRvdWJsZVF1b3RlUmVnRXhwID0gLycnL2c7XG52YXIgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vO1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXQgdGhlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LiBUaGUgcmVzdWx0IG1heSB2YXJ5IGJ5IGxvY2FsZS5cbiAqXG4gKiA+IFx1MjZBMFx1RkUwRiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBgZm9ybWF0YCB0b2tlbnMgZGlmZmVyIGZyb20gTW9tZW50LmpzIGFuZCBvdGhlciBsaWJyYXJpZXMuXG4gKiA+IFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIFRoZSBjaGFyYWN0ZXJzIHdyYXBwZWQgYmV0d2VlbiB0d28gc2luZ2xlIHF1b3RlcyBjaGFyYWN0ZXJzICgnKSBhcmUgZXNjYXBlZC5cbiAqIFR3byBzaW5nbGUgcXVvdGVzIGluIGEgcm93LCB3aGV0aGVyIGluc2lkZSBvciBvdXRzaWRlIGEgcXVvdGVkIHNlcXVlbmNlLCByZXByZXNlbnQgYSAncmVhbCcgc2luZ2xlIHF1b3RlLlxuICogKHNlZSB0aGUgbGFzdCBleGFtcGxlKVxuICpcbiAqIEZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGJhc2VkIG9uIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGVcbiAqIHdpdGggYSBmZXcgYWRkaXRpb25zIChzZWUgbm90ZSA3IGJlbG93IHRoZSB0YWJsZSkuXG4gKlxuICogQWNjZXB0ZWQgcGF0dGVybnM6XG4gKiB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXR0ZXJuIHwgUmVzdWx0IGV4YW1wbGVzICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLXxcbiAqIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEcuLkdHRyAgfCBBRCwgQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHICAgIHwgQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3QgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHR0cgICB8IEEsIEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ2FsZW5kYXIgeWVhciAgICAgICAgICAgICAgICAgICB8IHkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5byAgICAgIHwgNDR0aCwgMXN0LCAwdGgsIDE3dGggICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5ICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eXkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICB8IFkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZbyAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDIwMTd0aCAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWVkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgICB8IFIgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUiAgICAgIHwgLTQzLCAwMCwgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSICAgICB8IC0wNDMsIDAwMCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlIgICAgfCAtMDA0MywgMDAwMCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSUiAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1LDcgfFxuICogfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgIHwgdSAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1ICAgICAgfCAtNDMsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXUgICAgIHwgLTA0MywgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dSAgICB8IC0wMDQzLCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXV1ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IFF1YXJ0ZXIgKGZvcm1hdHRpbmcpICAgICAgICAgICAgfCBRICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVFRICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IFF1YXJ0ZXIgKHN0YW5kLWFsb25lKSAgICAgICAgICAgfCBxICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXFxICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IE1vbnRoIChmb3JtYXR0aW5nKSAgICAgICAgICAgICAgfCBNICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU0gICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTSAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU1NICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1vbnRoIChzdGFuZC1hbG9uZSkgICAgICAgICAgICAgfCBMICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTEwgICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTCAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTExMICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgfCB3ICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHd3ICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICAgfCBJICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElJICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICAgfCBkICAgICAgIHwgMSwgMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDMxc3QgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRkICAgICAgfCAwMSwgMDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICAgfCBEICAgICAgIHwgMSwgMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDM2NXRoLCAzNjZ0aCAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREICAgICAgfCAwMSwgMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREQgICAgIHwgMDAxLCAwMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRERERCAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgRGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgICAgICB8IEUuLkVFRSAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFRSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgfCBpICAgICAgIHwgMSwgMiwgMywgLi4uLCA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDd0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpICAgICAgfCAwMSwgMDIsIC4uLiwgMDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWkgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaWkgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgNyAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgIHwgZSAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZSAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWVlICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKHN0YW5kLWFsb25lKSB8IGMgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2MgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjYyAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2MgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjYyAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhLi5hYSAgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhICAgICB8IGFtLCBwbSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWEgICAgfCBhLm0uLCBwLm0uICAgICAgICAgICAgICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhYSAgIHwgYSwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgIHwgYi4uYmIgICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYiAgICAgfCBhbSwgcG0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiICAgIHwgYS5tLiwgcC5tLiwgbm9vbiwgbWlkbmlnaHQgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYmIgICB8IGEsIHAsIG4sIG1pICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgICB8IEIuLkJCQiAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCICAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQkIgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgICB8IGggICAgICAgfCAxLCAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBobyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMTJ0aCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGggICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgICB8IEggICAgICAgfCAwLCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIbyAgICAgIHwgMHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEggICAgICB8IDAwLCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgICB8IEsgICAgICAgfCAxLCAyLCAuLi4sIDExLCAwICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMHRoICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS0sgICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgICB8IGsgICAgICAgfCAyNCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrbyAgICAgIHwgMjR0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2sgICAgICB8IDI0LCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICB8IHMgICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3MgICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgICB8IFMgICAgICAgfCAwLCAxLCAuLi4sIDkgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTICAgICB8IDAwMCwgMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTU1MgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3LyBaKSAgICAgICAgfCBYICAgICAgIHwgLTA4LCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFggICAgICB8IC0wODAwLCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWCAgICAgfCAtMDg6MDAsICswNTozMCwgWiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYICAgIHwgLTA4MDAsICswNTMwLCBaLCArMTIzNDU2ICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWFggICB8IC0wODowMCwgKzA1OjMwLCBaLCArMTI6MzQ6NTYgICAgICB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgICB8IHggICAgICAgfCAtMDgsICswNTMwLCArMDAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eCAgICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4ICAgICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHggICAgfCAtMDgwMCwgKzA1MzAsICswMDAwLCArMTIzNDU2ICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4eCAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCwgKzEyOjM0OjU2IHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgIHwgTy4uLk9PTyB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9PT08gICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyICAgICB8XG4gKiB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSAgfCB6Li4uenp6IHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgNiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgenp6eiAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIsNiAgIHxcbiAqIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgICB8IHQgICAgICAgfCA1MTI5Njk1MjAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0dCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgIHwgVCAgICAgICB8IDUxMjk2OTUyMDkwMCAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRUICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICAgfCBQICAgICAgIHwgMDQvMjkvMTQ1MyAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFAgICAgICB8IEFwciAyOSwgMTQ1MyAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUCAgICAgfCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQICAgIHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgIHwgcCAgICAgICB8IDEyOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwICAgICAgfCAxMjowMDowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHAgICAgIHwgMTI6MDA6MDAgQU0gR01UKzIgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwcCAgICB8IDEyOjAwOjAwIEFNIEdNVCswMjowMCAgICAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgQ29tYmluYXRpb24gb2YgZGF0ZSBhbmQgdGltZSAgICB8IFBwICAgICAgfCAwNC8yOS8xNDUzLCAxMjowMCBBTSAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUHBwICAgIHwgQXByIDI5LCAxNDUzLCAxMjowMDowMCBBTSAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQcHBwICB8IEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFBwcHBwfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgfCAyLDcgICB8XG4gKiBOb3RlczpcbiAqIDEuIFwiRm9ybWF0dGluZ1wiIHVuaXRzIChlLmcuIGZvcm1hdHRpbmcgcXVhcnRlcikgaW4gdGhlIGRlZmF1bHQgZW4tVVMgbG9jYWxlXG4gKiAgICBhcmUgdGhlIHNhbWUgYXMgXCJzdGFuZC1hbG9uZVwiIHVuaXRzLCBidXQgYXJlIGRpZmZlcmVudCBpbiBzb21lIGxhbmd1YWdlcy5cbiAqICAgIFwiRm9ybWF0dGluZ1wiIHVuaXRzIGFyZSBkZWNsaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsYW5ndWFnZVxuICogICAgaW4gdGhlIGNvbnRleHQgb2YgYSBkYXRlLiBcIlN0YW5kLWFsb25lXCIgdW5pdHMgYXJlIGFsd2F5cyBub21pbmF0aXZlIHNpbmd1bGFyOlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTExMTCcsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWQnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTU1NTScsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWR1J2BcbiAqXG4gKiAyLiBBbnkgc2VxdWVuY2Ugb2YgdGhlIGlkZW50aWNhbCBsZXR0ZXJzIGlzIGEgcGF0dGVybiwgdW5sZXNzIGl0IGlzIGVzY2FwZWQgYnlcbiAqICAgIHRoZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoc2VlIGJlbG93KS5cbiAqICAgIElmIHRoZSBzZXF1ZW5jZSBpcyBsb25nZXIgdGhhbiBsaXN0ZWQgaW4gdGFibGUgKGUuZy4gYEVFRUVFRUVFRUVFYClcbiAqICAgIHRoZSBvdXRwdXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBkZWZhdWx0IHBhdHRlcm4gZm9yIHRoaXMgdW5pdCwgdXN1YWxseVxuICogICAgdGhlIGxvbmdlc3Qgb25lIChpbiBjYXNlIG9mIElTTyB3ZWVrZGF5cywgYEVFRUVgKS4gRGVmYXVsdCBwYXR0ZXJucyBmb3IgdW5pdHNcbiAqICAgIGFyZSBtYXJrZWQgd2l0aCBcIjJcIiBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NJykgLy89PiAnTm92J2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTScpIC8vPT4gJ04nYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAzLiBTb21lIHBhdHRlcm5zIGNvdWxkIGJlIHVubGltaXRlZCBsZW5ndGggKHN1Y2ggYXMgYHl5eXl5eXl5YCkuXG4gKiAgICBUaGUgb3V0cHV0IHdpbGwgYmUgcGFkZGVkIHdpdGggemVyb3MgdG8gbWF0Y2ggdGhlIGxlbmd0aCBvZiB0aGUgcGF0dGVybi5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ3l5eXl5eXl5JykgLy89PiAnMDAwMDIwMTcnYFxuICpcbiAqIDQuIGBRUVFRUWAgYW5kIGBxcXFxcWAgY291bGQgYmUgbm90IHN0cmljdGx5IG51bWVyaWNhbCBpbiBzb21lIGxvY2FsZXMuXG4gKiAgICBUaGVzZSB0b2tlbnMgcmVwcmVzZW50IHRoZSBzaG9ydGVzdCBmb3JtIG9mIHRoZSBxdWFydGVyLlxuICpcbiAqIDUuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBwYXR0ZXJucyBhcmUgQi5DLiB5ZWFyczpcbiAqXG4gKiAgICB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICogICAgfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAqICAgIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gKiAgICB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICogICAgfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAqXG4gKiAgICBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gKiAgICB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQ6XG4gKlxuICogICAgfCBZZWFyIHwgYHl5YCB8IGB1dWAgfFxuICogICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuICogICAgfCAxICAgIHwgICAwMSB8ICAgMDEgfFxuICogICAgfCAxNCAgIHwgICAxNCB8ICAgMTQgfFxuICogICAgfCAzNzYgIHwgICA3NiB8ICAzNzYgfFxuICogICAgfCAxNDUzIHwgICA1MyB8IDE0NTMgfFxuICpcbiAqICAgIFRoZSBzYW1lIGRpZmZlcmVuY2UgaXMgdHJ1ZSBmb3IgbG9jYWwgYW5kIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyAoYFlgIGFuZCBgUmApLFxuICogICAgZXhjZXB0IGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBkZXBlbmRlbnQgb24gYG9wdGlvbnMud2Vla1N0YXJ0c09uYFxuICogICAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKGNvbXBhcmUgW2dldElTT1dlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldElTT1dlZWtZZWFyfVxuICogICAgYW5kIFtnZXRXZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRXZWVrWWVhcn0pLlxuICpcbiAqIDYuIFNwZWNpZmljIG5vbi1sb2NhdGlvbiB0aW1lem9uZXMgYXJlIGN1cnJlbnRseSB1bmF2YWlsYWJsZSBpbiBgZGF0ZS1mbnNgLFxuICogICAgc28gcmlnaHQgbm93IHRoZXNlIHRva2VucyBmYWxsIGJhY2sgdG8gR01UIHRpbWV6b25lcy5cbiAqXG4gKiA3LiBUaGVzZSBwYXR0ZXJucyBhcmUgbm90IGluIHRoZSBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiAgICAtIGBpYDogSVNPIGRheSBvZiB3ZWVrXG4gKiAgICAtIGBJYDogSVNPIHdlZWsgb2YgeWVhclxuICogICAgLSBgUmA6IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKiAgICAtIGB0YDogc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYFRgOiBtaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBvYDogb3JkaW5hbCBudW1iZXIgbW9kaWZpZXJcbiAqICAgIC0gYFBgOiBsb25nIGxvY2FsaXplZCBkYXRlXG4gKiAgICAtIGBwYDogbG9uZyBsb2NhbGl6ZWQgdGltZVxuICpcbiAqIDguIGBZWWAgYW5kIGBZWVlZYCB0b2tlbnMgcmVwcmVzZW50IHdlZWstbnVtYmVyaW5nIHllYXJzIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIHllYXJzLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogOS4gYERgIGFuZCBgRERgIHRva2VucyByZXByZXNlbnQgZGF5cyBvZiB0aGUgeWVhciBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCBkYXlzIG9mIHRoZSBtb250aC5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgLSB0aGUgc3RyaW5nIG9mIHRva2Vuc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlPTFdIC0gdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpc1xuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyIHRva2VucyBgWVlgIGFuZCBgWVlZWWA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgZGF5IG9mIHllYXIgdG9rZW5zIGBEYCBhbmQgYEREYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgbG9jYWxpemVgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgZm9ybWF0TG9uZ2AgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLndlZWtTdGFydHNPbmAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDZcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDdcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMTEgRmVicnVhcnkgMjAxNCBpbiBtaWRkbGUtZW5kaWFuIGZvcm1hdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCAxLCAxMSksICdNTS9kZC95eXl5JylcbiAqIC8vPT4gJzAyLzExLzIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAyIEp1bHkgMjAxNCBpbiBFc3BlcmFudG86XG4gKiBpbXBvcnQgeyBlb0xvY2FsZSB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbydcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyKSwgXCJkbyAnZGUnIE1NTU0geXl5eVwiLCB7XG4gKiAgIGxvY2FsZTogZW9Mb2NhbGVcbiAqIH0pXG4gKiAvLz0+ICcyLWEgZGUganVsaW8gMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXNjYXBlIHN0cmluZyBieSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyczpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxNSksIFwiaCAnbycnY2xvY2snXCIpXG4gKiAvLz0+IFwiMyBvJ2Nsb2NrXCJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXQoZGlydHlEYXRlLCBkaXJ0eUZvcm1hdFN0ciwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX29wdGlvbnMkbG9jYWxlLCBfcmVmMiwgX3JlZjMsIF9yZWY0LCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZTIsIF9vcHRpb25zJGxvY2FsZTIkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLCBfcmVmNSwgX3JlZjYsIF9yZWY3LCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZTMsIF9vcHRpb25zJGxvY2FsZTMkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMywgX2RlZmF1bHRPcHRpb25zJGxvY2FsNDtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBmb3JtYXRTdHIgPSBTdHJpbmcoZGlydHlGb3JtYXRTdHIpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgbG9jYWxlID0gKF9yZWYgPSAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX29wdGlvbnMkbG9jYWxlICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRsb2NhbGUgOiBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBkZWZhdWx0TG9jYWxlO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmMiA9IChfcmVmMyA9IChfcmVmNCA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTIgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTIub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMiRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUyJG9wdGkuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmNCAhPT0gdm9pZCAwID8gX3JlZjQgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmNSA9IChfcmVmNiA9IChfcmVmNyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTMub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUzJG9wdGkud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNyAhPT0gdm9pZCAwID8gX3JlZjcgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY2ICE9PSB2b2lkIDAgPyBfcmVmNiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsNC53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY1ICE9PSB2b2lkIDAgPyBfcmVmNSA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5sb2NhbGl6ZSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGxvY2FsaXplIHByb3BlcnR5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUuZm9ybWF0TG9uZykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGZvcm1hdExvbmcgcHJvcGVydHknKTtcbiAgfVxuICB2YXIgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIGlmICghaXNWYWxpZChvcmlnaW5hbERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB9XG5cbiAgLy8gQ29udmVydCB0aGUgZGF0ZSBpbiBzeXN0ZW0gdGltZXpvbmUgdG8gdGhlIHNhbWUgZGF0ZSBpbiBVVEMrMDA6MDAgdGltZXpvbmUuXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gVVRDIGZ1bmN0aW9ucyB3aWxsIGJlIGltcGxlbWVudGVkLCBsb2NhbGVzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIHRoZW0uXG4gIC8vIFNlZSBhbiBpc3N1ZSBhYm91dCBVVEMgZnVuY3Rpb25zOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM3NlxuICB2YXIgdGltZXpvbmVPZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSk7XG4gIHZhciB1dGNEYXRlID0gc3ViTWlsbGlzZWNvbmRzKG9yaWdpbmFsRGF0ZSwgdGltZXpvbmVPZmZzZXQpO1xuICB2YXIgZm9ybWF0dGVyT3B0aW9ucyA9IHtcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSxcbiAgICB3ZWVrU3RhcnRzT246IHdlZWtTdGFydHNPbixcbiAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICBfb3JpZ2luYWxEYXRlOiBvcmlnaW5hbERhdGVcbiAgfTtcbiAgdmFyIHJlc3VsdCA9IGZvcm1hdFN0ci5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSAncCcgfHwgZmlyc3RDaGFyYWN0ZXIgPT09ICdQJykge1xuICAgICAgdmFyIGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJykubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICAvLyBSZXBsYWNlIHR3byBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyB3aXRoIG9uZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyXG4gICAgaWYgKHN1YnN0cmluZyA9PT0gXCInJ1wiKSB7XG4gICAgICByZXR1cm4gXCInXCI7XG4gICAgfVxuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwiJ1wiKSB7XG4gICAgICByZXR1cm4gY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZyk7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXR0ZXIodXRjRGF0ZSwgc3Vic3RyaW5nLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHApKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAnICsgZmlyc3RDaGFyYWN0ZXIgKyAnYCcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkge1xuICB2YXIgbWF0Y2hlZCA9IGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHApO1xuICBpZiAoIW1hdGNoZWQpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgXCInXCIpO1xufSIsICJleHBvcnQgY29uc3QgcG9pbnRzTm90ZU1hanVyaXR5ID0gMTAwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzTWFqdXJpdHkgPSAxMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlID0gNTAwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlID0gMjAwMDtcclxuZXhwb3J0IGNvbnN0IHN0cmVha2Jvb3N0ZXJEZWNyZWFzZSA9IDAuMjtcclxuZXhwb3J0IGNvbnN0IHN0cmVha2Jvb3N0ZXJJbmNyZWFzZURhaWx5ID0gMC4xO1xyXG5leHBvcnQgY29uc3Qgc3RyZWFrYm9vc3RlckluY3JlYXNlV2Vla2x5ID0gMTtcclxuZXhwb3J0IGNvbnN0IGF2YXRhckluaXRDb250ZW50ID0gIGAjIEF2YXRhclxyXG5cclxufCAgICAgICAgfCAgICAgfFxyXG58IC0tLS0tLSB8IC0tLSB8XHJcbnwgTGV2ZWwgIHwgMCAgICB8XHJcbnwgUG9pbnRzIHwgMCAgICB8XHJcbl5sZXZlbEFuZFBvaW50c1x0XHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFtFeHByaXJpZW5jZV1cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IHBvaW50cyByZWFjaGVkXHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxyXG4gICAgZGF0YTogWzEwMDBdXHJcbnhNaW46IDBcclxueE1heDogMTAwMFxyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDQwJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG5pbmRleEF4aXM6IHlcclxueFRpdGxlOiBcInByb2dyZXNzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tIHxcclxufCAqKmJvb3N0ZXIgZmFjdG9yKiogfCAqKjAqKiB8XHJcbl5ib29zdGVyRmFjdG9yXHJcbnwgICAgICAgICAgICAgfCAgICAgfCAgICAgICB8XHJcbnwgLS0tLS0tLS0tLS0gfCAtLS0gfCAtLS0tLSB8XHJcbnwgKipkYWlseSBOb3RlcyoqIHwgKjUwMEVQKiB8ICoqMC8yKiogfFxyXG5eZGFpbHlOb3Rlc0NoYWxsZW5nZVxyXG58ICB8ICAgICB8fFxyXG58IC0tLS0gfCAtLS0gfCAtLS0gfFxyXG58ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKiowLzcqKiAgIHxcclxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFtOb3Rlc11cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IGRheXMgZG9uZSBpbiBhIHJvd1xyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xyXG4gICAgZGF0YTogWzddXHJcbnhNaW46IDBcclxueE1heDogN1xyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDQwJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG5pbmRleEF4aXM6IHlcclxueFRpdGxlOiBcImRheXNcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCBMZXZlbCB8IENvdW50IHxcclxufCA6LS0tOiB8IDotLS06IHxcclxufCBNYWp1cml0eSA1IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNSwgJzUnLCAnNVx1MjdBMVx1RkUwRicsICc1XHUyQjA3XHVGRTBGJywgJzVcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSA0IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNCwgJzQnLCAnNFx1MjdBMVx1RkUwRicsICc0XHUyQjA3XHVGRTBGJywgJzRcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAzIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMywgJzMnLCAnM1x1MjdBMVx1RkUwRicsICczXHUyQjA3XHVGRTBGJywgJzNcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAyIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMiwgJzInLCAnMlx1MjdBMVx1RkUwRicsICcyXHUyQjA3XHVGRTBGJywgJzJcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAxIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMSwgJzEnLCAnMVx1MjdBMVx1RkUwRicsICcxXHUyQjA3XHVGRTBGJywgJzFcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAwIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMCwgJzAnLCAnMFx1MjdBMVx1RkUwRicsICcwXHUyQjA3XHVGRTBGJywgJzBcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxuXHJcblxyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbMCwgMCwgMF1cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IG1vZGlmaWVkXHJcbiAgICBkYXRhOiBbMCwgMCwgMF1cclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA4MCAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbnlUaXRsZTogXCJOdW1iZXIgb2YgTm90ZXNcIlxyXG54VGl0bGU6IFwiTW9udGhzXCJcclxueE1pbjogMFxyXG5cXGBcXGBcXGBcclxuXkNoYXJ0TW9udGhcclxuXHJcblxyXG4jIyMgQmFkZ2VzXHJcbiMjIyMgYWNoaWV2ZWRcclxuXHJcblxyXG4jIyMjIG91dHN0YW5kaW5nXHJcbmxldmVsIDU6ICpFbmxpZ2h0ZW5lZCBOb3ZpY2UqXHJcbmxldmVsIDEwOiAqQ3VyaW91cyBDb25ub2lzc2V1cipcclxubGV2ZWwgMjA6ICpCcmFpbmlhYyBUcmFpbGJsYXplcipcclxubGV2ZWwgMjc6ICpTY2hvbGFybHkgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDM1OiAqSW5mbyBOaW5qYSBNYXN0ZXIqXHJcbmxldmVsIDQyOiAqV2lzZSBPd2wgR3VydSpcclxubGV2ZWwgNTA6ICpFaW5zdGVpbiBJbmNhcm5hdGUqXHJcbmxldmVsIDYwOiAqTWFzdGVybWluZCBTYWdlKlxyXG5sZXZlbCA3NTogKkNlcmVicmFsIE1hZXN0cm8qXHJcbmxldmVsIDgyOiAqWmVuIEtub3dsZWRnZSBLZWVwZXIqXHJcbmxldmVsIDkwOiAqR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkKlxyXG5sZXZlbCAxMDA6ICpPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZypcclxuXHJcblxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDUqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNSBvciBub3RlLW1hdHVyaXR5ID0gXCI1XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNCoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA0IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gM1xyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMyBvciBub3RlLW1hdHVyaXR5ID0gXCIzXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDJcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAxXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAxIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMFxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMCBvciBub3RlLW1hdHVyaXR5ID0gXCIwXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcbmA7XHJcbiIsICJpbXBvcnQgeyBURmlsZSwgQXBwLCB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb24oY2hhckNvdW50VG90YWw6IG51bWJlciwgbGF5ZXIyY291bnQ6IG51bWJlciwgbGF5ZXIzY291bnQ6IG51bWJlcik6IG51bWJlciB7XHJcblx0Y29uc3QgcGVyY2VudExheWVyMiA9IGxheWVyMmNvdW50ICogMTAwIC8gY2hhckNvdW50VG90YWw7XHJcbiAgICBjb25zdCBwZXJjZW50TGF5ZXIzID0gbGF5ZXIzY291bnQgKiAxMDAgLyBsYXllcjJjb3VudDtcclxuXHR2YXIgbGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdHZhciBsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0dmFyIG1hanVyaXR5ID0gMDtcclxuXHRpZiAoY2hhckNvdW50VG90YWwgPCAzMDAwKSB7XHJcblx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBOb3RlIGlzIG5vdCBsb25nIGVub3VnaCB0byBnZXQgaW50byBjYWxjdWxhdGlvbiBmb3IgbWFqdXJpdHkuIFRoZSB0b3RhbCBjaGFyYWN0ZXIgY291bnQgaXMgJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0aWYgKHBlcmNlbnRMYXllcjIgPT0gMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMTApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDIwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAzMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGF5ZXIzY291bnQgPT0gMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMTApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDIwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGF5ZXIybWFqdXJpdHkgPT0gMSAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMTtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gMiAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPj0gMyAmJiBsYXllcjNtYWp1cml0eSA9PSAwKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAoKGxheWVyMm1hanVyaXR5ID09IDMgfHwgbGF5ZXIybWFqdXJpdHkgPT0gNCkgJiYgKGxheWVyM21hanVyaXR5ID09IDQgfHwgbGF5ZXIzbWFqdXJpdHkgPT0gNSkpIHtcclxuXHRcdFx0bWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSA1ICYmIGxheWVyM21hanVyaXR5ID09IDUpIHtcclxuXHRcdFx0bWFqdXJpdHkgPSA1O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0XHJcblx0Ly9jb25zb2xlLmxvZyhgbGF5ZXIybWFqdXJpdHk6ICR7bGF5ZXIybWFqdXJpdHl9IFxcdGxheWVyM21hanVyaXR5OiAke2xheWVyM21hanVyaXR5fSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBwZXJjZW50TGF5ZXIyOiAke3BlcmNlbnRMYXllcjJ9IFxcdHBlcmNlbnRMYXllcjM6ICR7cGVyY2VudExheWVyM30gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgY2hhckNvdW50VG90YWw6ICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0cmV0dXJuIG1hanVyaXR5O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZyk6IHsgY2hhckNvdW50OiBudW1iZXI7IGhpZ2hsaWdodGVkQ291bnQ6IG51bWJlcjsgYm9sZENvdW50OiBudW1iZXIgfSB7XHJcbiAgXHJcblx0Y29uc3QgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uID0gZmlsZW5hbWU7IC8vLnNsaWNlKDAsIC1maWxlbmFtZS5sZW5ndGgpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gZm9ybWF0dGluZyBzeW1ib2xzXHJcblx0Y29uc3Qgc3RyaXBwZWRDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9bKl9+YF0vZywgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBoZWFkaW5ncyB0aGF0IG1hdGNoIHRoZSBmaWxlbmFtZVxyXG5cdGNvbnN0IGhlYWRpbmdSZWdleCA9IC9eKCMrKVxccyguKikkL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MgPSBzdHJpcHBlZENvbnRlbnQucmVwbGFjZShoZWFkaW5nUmVnZXgsIChtYXRjaCwgcDEsIHAyKSA9PiB7XHJcblx0XHJcblx0XHQvLyBjb25zb2xlLmxvZyhgcDI6ICR7cDJ9YCk7XHJcblx0XHRpZiAocDIgPT09IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtYXRjaDtcclxuXHR9KTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRIZWFkaW5nczogJHtjb250ZW50V2l0aG91dEhlYWRpbmdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWV0YWRhdGEgYmxvY2tzIGZyb20gY291bnRcclxuXHRjb25zdCBtZXRhZGF0YVJlZ2V4ID0gL14tLS1bXFxzXFxTXSo/LS0tL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEgPSBjb250ZW50V2l0aG91dEhlYWRpbmdzLnJlcGxhY2UobWV0YWRhdGFSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TWV0YWRhdGE6ICR7Y29udGVudFdpdGhvdXRNZXRhZGF0YX1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlICN0YWdzIGZyb20gY291bnRcclxuXHRjb25zdCB0YWdSZWdleCA9IC8jW15cXHNdKy9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0VGFncyA9IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEucmVwbGFjZSh0YWdSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0VGFnczogJHtjb250ZW50V2l0aG91dFRhZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBsaW5rcyBhbmQgV2lraXBlZGlhLWxpbmtzIGZyb20gY291bnRcclxuXHRjb25zdCBsaW5rUmVnZXggPSAvXFxbLio/XFxdXFwoLio/XFwpfFxcW1xcWy4qP1xcXVxcXS9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TGlua3MgPSBjb250ZW50V2l0aG91dFRhZ3MucmVwbGFjZShsaW5rUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dExpbmtzOiAke2NvbnRlbnRXaXRob3V0TGlua3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBibGFuayBuZXdsaW5lc1xyXG5cdGNvbnN0IGZpbHRlcmVkQ29udGVudDogc3RyaW5nID0gY29udGVudFdpdGhvdXRMaW5rc1xyXG5cdC5zcGxpdCgnXFxuJykgLy8gU3BsaXQgdGhlIGNvbnRlbnQgaW50byBhbiBhcnJheSBvZiBsaW5lc1xyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpIC8vIEZpbHRlciBvdXQgbGluZXMgdGhhdCBhcmUgZW1wdHkgb3IgY29udGFpbiBvbmx5IHdoaXRlc3BhY2VcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICctLS0nKSAvLyByZW1vdmUgLS0tIG9uIHNpbmdsZSBsaW5lc1xyXG5cdC5qb2luKCdcXG4nKTsgLy8gSm9pbiB0aGUgcmVtYWluaW5nIGxpbmVzIGJhY2sgaW50byBhIHN0cmluZywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzXHJcblx0Ly8gY29uc29sZS5sb2coYGZpbHRlcmVkQ29udGVudDogJHtmaWx0ZXJlZENvbnRlbnR9YCk7XHJcblxyXG5cdC8vIENvdW50IHRoZSByZW1haW5pbmcgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGNoYXJDb3VudCA9IGZpbHRlcmVkQ29udGVudC5sZW5ndGg7XHJcblx0Ly8gY29uc29sZS5sb2coYGNoYXJDb3VudDogJHtjaGFyQ291bnR9YCk7XHJcblxyXG5cclxuXHQvLyBjYWxjdWxhdGUgTGF5ZXIgMiAmIDMgTGVuZ3RoXHJcblxyXG5cdC8vIENvdW50IHRoZSBoaWdobGlnaHRlZCBhbmQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0bGV0IGhpZ2hsaWdodGVkQ291bnQgPSAwO1xyXG5cdGxldCBib2xkQ291bnQgPSAwO1xyXG4gIFxyXG5cdHZhciBsYXllcjJleGNsdWRlID0gJz0nXHJcblx0dmFyIGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0Ly8gdG8gaGF2ZSB0aGUgcmVnIGV4IGNvcnJlY3QuIG90aGVyd2lzZSBpdCB3aWxsIGdldCBzdHVjIHdpdGggKiouXHJcblx0aWYobGF5ZXIzID09ICcqKicpe1xyXG5cdFx0bGF5ZXIzID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdH1cclxuXHRpZihsYXllcjIgPT0gJyoqJyl7XHJcblx0XHRsYXllcjIgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnPSdcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnXFxcXConXHJcblx0fVxyXG4gIFx0XHJcblxyXG5cdGNvbnN0IGhpZ2hsaWdodFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjJ9W14ke2xheWVyMmV4Y2x1ZGV9XSske2xheWVyMn1gLCBcImdcIik7XHJcbiAgICBjb25zdCBib2xkUmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyM31bXiR7bGF5ZXIzZXhjbHVkZX1dKyR7bGF5ZXIzfWAsIFwiZ1wiKTtcclxuICBcclxuXHQvLyBDb3VudCBoaWdobGlnaHRlZCBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgaGlnaGxpZ2h0ZWRNYXRjaGVzID0gY29udGVudC5tYXRjaChoaWdobGlnaHRSZWdleCk7XHJcblx0aWYgKGhpZ2hsaWdodGVkTWF0Y2hlcykge1xyXG5cdCAgaGlnaGxpZ2h0ZWRDb3VudCA9IGhpZ2hsaWdodGVkTWF0Y2hlcy5qb2luKFwiXCIpLmxlbmd0aCAtIChoaWdobGlnaHRlZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJz09J1xyXG5cdCAgLy8gZmlyc3QgdGFrZSB0aGUgbGF5ZXIyIChoaWdobGlnaHRlZENvdW50KSBhbmQgcnVuIG9uIHRoaXMgdGhlICdib2xkUmVnZXgnXHJcblx0ICAvLyBDb3VudCBib2xkIGNoYXJhY3RlcnNcclxuXHQgIGNvbnN0IGxheWVyMlN0cmluZyA9IGhpZ2hsaWdodGVkTWF0Y2hlcy5qb2luKFwiXCIpO1xyXG5cdCAgY29uc3QgYm9sZE1hdGNoZXMgPSBsYXllcjJTdHJpbmcubWF0Y2goYm9sZFJlZ2V4KTtcclxuXHQgIGlmIChib2xkTWF0Y2hlcykge1xyXG5cdCAgICBib2xkQ291bnQgPSBib2xkTWF0Y2hlcy5qb2luKFwiXCIpLmxlbmd0aCAtIChib2xkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnKionXHJcblx0ICB9XHJcblx0fVxyXG4gIFxyXG5cdFxyXG5cdFxyXG4gIFxyXG5cdHJldHVybiB7IGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50IH07XHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZXZlbE9mTWF0dXJpdHkobm90ZUxlbmd0aDogbnVtYmVyLCBsZW5ndGhPZlRpdGxlOiBudW1iZXIsIElubGlua3M6IG51bWJlciwgb3V0Z29pbmdMaW5rczogbnVtYmVyLCBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBub3RlTGVuZ3RoOiAke25vdGVMZW5ndGh9XFx0bGVuZ3RoT2ZUaXRsZTogJHtsZW5ndGhPZlRpdGxlfVxcdElubGlua3M6ICR7SW5saW5rc31cXHRvdXRnb2luZ0xpbmtzOiAke291dGdvaW5nTGlua3N9YClcclxuXHRcclxuXHQvLyBkZWNpZGUgaWYgbm90ZUxlbmd0aC1tYWp1cml0eSBvciBwcm9ncmVzc2l2ZVN1bS1tYWp1cml0eSBzaGFsbCBiZSB1c2VkXHJcblx0dmFyIGxlbmd0aE1hanVyaXR5ID0gMDtcclxuXHRpZihub3RlTGVuZ3RoID49IHByb2dyZXNzaXZlU3VtTWFqdXJpdHkpIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gbm90ZUxlbmd0aDtcclxuXHR9IGVsc2Uge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5O1xyXG5cdH1cclxuXHRcclxuXHRjb25zdCB0b3RhbFdlaWdodCA6IG51bWJlciA9IGxlbmd0aE1hanVyaXR5ICsgbGVuZ3RoT2ZUaXRsZSArIElubGlua3MgKyBvdXRnb2luZ0xpbmtzO1xyXG5cdGNvbnN0IGF2ZXJhZ2VXZWlnaHQgPSB0b3RhbFdlaWdodCAvIDU7XHJcblx0Ly8gY29uc29sZS5sb2coYHRvdGFsV2VpZ2h0OiAke3RvdGFsV2VpZ2h0fVxcdGF2ZXJhZ2VXZWlnaHQ6ICR7YXZlcmFnZVdlaWdodH1gKVxyXG5cdGlmIChhdmVyYWdlV2VpZ2h0IDwgMC41KSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMSkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDIpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMy41KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gNCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlT3V0bGlua3Mob3V0bGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG91dGxpbmtzOiAke291dGxpbmtzfWApXHJcblx0aWYgKG91dGxpbmtzIDwgMikge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDMpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA1KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgOSkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTIpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUlubGlua3MobnVtSW5saW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvL3ZhciBwcm96ZW50SW5saW5rcyA9IG51bUlubGlua3MgKiAxMDAgLyBudW1BbGxGaWxlcztcclxuXHQvL2NvbnNvbGUubG9nKGBudW1JbmxpbmtzOiAke251bUlubGlua3N9XFx0bnVtQWxsRmlsZXM6ICR7bnVtQWxsRmlsZXN9XFx0cHJvemVudElubGlua3M6ICR7cHJvemVudElubGlua3N9YClcclxuXHQvKmlmIChwcm96ZW50SW5saW5rcyA8IDAuMDA1IHx8IHByb3plbnRJbmxpbmtzID4gMC4xKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgKi8gaWYgKG51bUlubGlua3MgPT0gMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgNCkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgOCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDE2KSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPj0gMTYgJiYgbnVtSW5saW5rcyA8IDUwMCApIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZURpcmVjdGlvbihyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRsZXQgcmF0aW5nID0gXCJcIlxyXG5cdGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPiByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDdcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA2XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA9PSByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTI3QTFcdUZFMEZcIlxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlwiXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxlbmd0aEZpbGVuYW1lKGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIGlmIChmaWxlbmFtZS5sZW5ndGggPCAzMCkge1xyXG5cdHJldHVybiAwO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgODApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDEwMCkge1xyXG5cdHJldHVybiAzO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTUwKSB7XHJcblx0cmV0dXJuIDU7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxOTApIHtcclxuXHRyZXR1cm4gNDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDIxMCkge1xyXG5cdHJldHVybiAyO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjUwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIHtcclxuXHRyZXR1cm4gMDtcclxuICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU5vdGVMZW5ndGgoY29udGVubGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGlmIChjb250ZW5sZW5ndGggPCAyMDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgNTUwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEwMDApIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTIwMCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyMDAwKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDI1MDApIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMzAwMCkge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1iZXJPZk91dGxpbmtzKGFjdGl2ZUZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuXHQvLyBjb25zdCBhY3RpdmVGaWxlOiBURmlsZSB8IG51bGwgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRpZiAoIWFjdGl2ZUZpbGUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHRjb25zdCBpbmxpbmtzID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGFjdGl2ZUZpbGUpPy5saW5rcztcclxuXHRyZXR1cm4gaW5saW5rcyA/IE9iamVjdC5rZXlzKGlubGlua3MpLmxlbmd0aCA6IDA7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgXHJcblx0Y29uc3QgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uID0gZmlsZW5hbWU7IC8vLnNsaWNlKDAsIC1maWxlbmFtZS5sZW5ndGgpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gZm9ybWF0dGluZyBzeW1ib2xzXHJcblx0Y29uc3Qgc3RyaXBwZWRDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9bKl9+YF0vZywgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBoZWFkaW5ncyB0aGF0IG1hdGNoIHRoZSBmaWxlbmFtZVxyXG5cdGNvbnN0IGhlYWRpbmdSZWdleCA9IC9eKCMrKVxccyguKikkL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MgPSBzdHJpcHBlZENvbnRlbnQucmVwbGFjZShoZWFkaW5nUmVnZXgsIChtYXRjaCwgcDEsIHAyKSA9PiB7XHJcblx0XHJcblx0XHQvLyBjb25zb2xlLmxvZyhgcDI6ICR7cDJ9YCk7XHJcblx0XHRpZiAocDIgPT09IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtYXRjaDtcclxuXHR9KTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRIZWFkaW5nczogJHtjb250ZW50V2l0aG91dEhlYWRpbmdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWV0YWRhdGEgYmxvY2tzIGZyb20gY291bnRcclxuXHRjb25zdCBtZXRhZGF0YVJlZ2V4ID0gL14tLS1bXFxzXFxTXSo/LS0tL2dtO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEgPSBjb250ZW50V2l0aG91dEhlYWRpbmdzLnJlcGxhY2UobWV0YWRhdGFSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TWV0YWRhdGE6ICR7Y29udGVudFdpdGhvdXRNZXRhZGF0YX1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlICN0YWdzIGZyb20gY291bnRcclxuXHRjb25zdCB0YWdSZWdleCA9IC8jW15cXHNdKy9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0VGFncyA9IGNvbnRlbnRXaXRob3V0TWV0YWRhdGEucmVwbGFjZSh0YWdSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0VGFnczogJHtjb250ZW50V2l0aG91dFRhZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBsaW5rcyBhbmQgV2lraXBlZGlhLWxpbmtzIGZyb20gY291bnRcclxuXHRjb25zdCBsaW5rUmVnZXggPSAvXFxbLio/XFxdXFwoLio/XFwpfFxcW1xcWy4qP1xcXVxcXS9nO1xyXG5cdGNvbnN0IGNvbnRlbnRXaXRob3V0TGlua3MgPSBjb250ZW50V2l0aG91dFRhZ3MucmVwbGFjZShsaW5rUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dExpbmtzOiAke2NvbnRlbnRXaXRob3V0TGlua3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBibGFuayBuZXdsaW5lc1xyXG5cdGNvbnN0IGZpbHRlcmVkQ29udGVudDogc3RyaW5nID0gY29udGVudFdpdGhvdXRMaW5rc1xyXG5cdC5zcGxpdCgnXFxuJykgLy8gU3BsaXQgdGhlIGNvbnRlbnQgaW50byBhbiBhcnJheSBvZiBsaW5lc1xyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpIC8vIEZpbHRlciBvdXQgbGluZXMgdGhhdCBhcmUgZW1wdHkgb3IgY29udGFpbiBvbmx5IHdoaXRlc3BhY2VcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICctLS0nKSAvLyByZW1vdmUgLS0tIG9uIHNpbmdsZSBsaW5lc1xyXG5cdC5qb2luKCdcXG4nKTsgLy8gSm9pbiB0aGUgcmVtYWluaW5nIGxpbmVzIGJhY2sgaW50byBhIHN0cmluZywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzXHJcblx0Ly8gY29uc29sZS5sb2coYGZpbHRlcmVkQ29udGVudDogJHtmaWx0ZXJlZENvbnRlbnR9YCk7XHJcblxyXG5cdC8vIENvdW50IHRoZSByZW1haW5pbmcgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGNoYXJDb3VudCA9IGZpbHRlcmVkQ29udGVudC5sZW5ndGg7XHJcblx0Ly8gY29uc29sZS5sb2coYGNoYXJDb3VudDogJHtjaGFyQ291bnR9YCk7XHJcblxyXG5cdHJldHVybiBjaGFyQ291bnQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rc19zaW5nbGUoZmlsZV9wYXRoOiBzdHJpbmcsIHZhdWx0X3BhdGg6IHN0cmluZyk6IG51bWJlciB7XHJcblx0Ly8gR2V0IHRoZSBmaWxlbmFtZSBhbmQgZGlyZWN0b3J5IG9mIHRoZSBmaWxlIHdlJ3JlIGNvdW50aW5nIGxpbmtzIHRvXHJcblx0Y29uc3QgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVfcGF0aCk7XHJcblx0Y29uc3QgZGlyZWN0b3J5ID0gcGF0aC5kaXJuYW1lKGZpbGVfcGF0aCk7XHJcblxyXG5cdC8vIENyZWF0ZSBhIHNldCB0byBob2xkIGFsbCB0aGUgZmlsZXMgdGhhdCBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdGNvbnN0IGxpbmtpbmdfZmlsZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xyXG5cclxuXHQvLyBSZWN1cnNpdmVseSBzZWFyY2ggZm9yIGZpbGVzIGluIHRoZSB2YXVsdCBkaXJlY3RvcnkgdGhhdCBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdGNvbnN0IHdhbGtTeW5jID0gKGRpcjogc3RyaW5nLCBmaWxlbGlzdDogc3RyaW5nW10pID0+IHtcclxuXHRcdGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoZGlyKTtcclxuXHRcdGZpbGVsaXN0ID0gZmlsZWxpc3QgfHwgW107XHJcblx0XHRmaWxlcy5mb3JFYWNoKChmaWxlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0aWYgKGZzLnN0YXRTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpKS5pc0RpcmVjdG9yeSgpKSB7XHJcblx0XHRcdFx0ZmlsZWxpc3QgPSB3YWxrU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgZmlsZWxpc3QpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdC8vIElnbm9yZSBub24tbWQgZmlsZXMgYW5kIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRpZiAoIWZpbGUuZW5kc1dpdGgoXCIubWRcIikgfHwgZmlsZSA9PT0gZmlsZW5hbWUpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFJlYWQgdGhlIGZpbGUgYW5kIGxvb2sgZm9yIGxpbmtzIHRvIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIFwidXRmLThcIik7XHJcblx0XHRcdFx0ZGF0YS5zcGxpdCgnXFxuJykuZm9yRWFjaCgobGluZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAobGluZS5pbmNsdWRlcyhgW1ske2ZpbGVuYW1lLnNsaWNlKDAsIC0zKX1dXWApIHx8IGxpbmUuaW5jbHVkZXMoYFske2ZpbGVuYW1lLnNsaWNlKDAsIC0zKX1dYCkpIHtcclxuXHRcdFx0XHRcdFx0Ly8gV2UgZm91bmQgYSBsaW5rIHRvIG91ciB0YXJnZXQgZmlsZSFcclxuXHRcdFx0XHRcdFx0bGlua2luZ19maWxlcy5hZGQocGF0aC5yZWxhdGl2ZShkaXJlY3RvcnksIHBhdGguam9pbihkaXIsIGZpbGUpKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIGZpbGVsaXN0O1xyXG5cdH07XHJcblxyXG5cdHdhbGtTeW5jKHZhdWx0X3BhdGgsIFtdKTtcclxuXHJcblx0Ly8gY291bnQgaG93IG1hbnkgZmlsZXMgYXJlIG1lbnRpb25pbmcgdGhlIGlucHV0IGZpbGVcclxuXHRyZXR1cm4gbGlua2luZ19maWxlcy5zaXplO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3MoZmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG4gICAgY29uc3QgeyBhcHA6IHsgbWV0YWRhdGFDYWNoZTogeyByZXNvbHZlZExpbmtzIH0gfSB9ID0gdGhpcztcclxuICAgIGNvbnN0IHsgcGF0aCB9ID0gZmlsZTtcclxuXHJcbiAgICBjb25zdCBzdW1JbmxpbmtzID0gT2JqZWN0LnZhbHVlcyhyZXNvbHZlZExpbmtzKVxyXG4gICAgICAgIC5tYXAoKHZhbDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSkgPT4gdmFsW3BhdGhdID8/IDApXHJcbiAgICAgICAgLnJlZHVjZSgobGVmdCwgcmlnaHQpID0+IGxlZnQgKyByaWdodCwgMCk7XHJcblxyXG4gICAgcmV0dXJuIHN1bUlubGlua3M7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZUNvdW50TWFwID0gYXN5bmMgKGFwcDogQXBwLCBleGNsdWRlVGFnOiBzdHJpbmcsIGV4Y2x1ZGVGb2xkZXI6IHN0cmluZyk6IFByb21pc2U8TWFwPHN0cmluZywgbnVtYmVyPj4gPT4ge1xyXG5cclxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHJcblx0XHJcblx0Ly8gZmlsZXMgd2l0aCB0aGlzICN0YWdzIGluIHRvIGlnbm9yZVxyXG5cdGxldCBleGNsdWRlZFN1YnN0cmluZ3MgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVUYWcgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBleGNsdWRlVGFnLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRcclxuXHJcblx0Ly8gZm9sZGVycyB0byBpZ25vcmUgLm1kLWZpbGVzIGluXHJcblx0bGV0IGV4Y2x1ZGVkRm9sZGVycyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZUZvbGRlciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IGV4Y2x1ZGVGb2xkZXIuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdGV4Y2x1ZGVkRm9sZGVycy5wdXNoKCcub2JzaWRpYW4nLCAnLnRyYXNoJyk7IC8vIGhhcmRjb2RlIHRoZSBiYXNpYyBmb2xkZXJzXHJcblx0XHJcbiAgICBjb25zdCBmaWxlQ291bnRNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cclxuXHRcdGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTtcclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcblxyXG5cdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblxyXG4gICAgICAgIGlmICghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuICAgICAgICB9XHJcblx0XHRcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsZUNvdW50TWFwO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlTWFwID0gYXN5bmMgKGFwcDogQXBwLCBleGNsdWRlVGFnOiBzdHJpbmcsIGV4Y2x1ZGVGb2xkZXI6IHN0cmluZyk6IFByb21pc2U8VEZpbGVbXT4gPT4ge1xyXG5cclxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcclxuXHJcblx0Ly8gZmlsZXMgd2l0aCB0aGlzICN0YWdzIGluIHRvIGlnbm9yZVxyXG5cdGxldCBleGNsdWRlZFN1YnN0cmluZ3MgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVUYWcgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZFN1YnN0cmluZ3MgPSBleGNsdWRlVGFnLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZFN1YnN0cmluZ3M6ICR7ZXhjbHVkZWRTdWJzdHJpbmdzfWApXHJcblx0Ly8gZm9sZGVycyB0byBpZ25vcmUgLm1kLWZpbGVzIGluXHJcblx0bGV0IGV4Y2x1ZGVkRm9sZGVycyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZUZvbGRlciA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkRm9sZGVycyA9IGV4Y2x1ZGVGb2xkZXIuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdGV4Y2x1ZGVkRm9sZGVycy5wdXNoKCcub2JzaWRpYW4nLCAnLnRyYXNoJyk7IC8vIGhhcmRjb2RlIHRoZSBiYXNpYyBmb2xkZXJzXHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRGb2xkZXJzOiAke2V4Y2x1ZGVkRm9sZGVyc31gKVx0XHJcbiAgICBsZXQgZmlsZUFycmF5OiBURmlsZVtdID0gW107XHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cclxuICAgICAgICBjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdC8vY29uc29sZS5sb2coYGZpbGUucGF0aDogJHtmaWxlLnBhdGh9YClcclxuXHRcdGlmICgoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgfHwgZXhjbHVkZVRhZy5sZW5ndGggPT09IDApICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBmaWxlICR7ZmlsZX0gZ2V0J3MgYWRkZWQuYClcclxuXHRcdFx0ZmlsZUFycmF5LnB1c2goZmlsZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlsZUFycmF5O1xyXG59O1xyXG4iLCAiaW1wb3J0IHtURmlsZX0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFYXJsaWVzdENyZWF0ZWRGaWxlKGZpbGVzOiBURmlsZVtdKTogVEZpbGUge1xyXG5cdGxldCBlYXJsaWVzdENyZWF0ZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5jdGltZSA8IGVhcmxpZXN0Q3JlYXRlZEZpbGUuc3RhdC5jdGltZSkge1xyXG5cdFx0XHRlYXJsaWVzdENyZWF0ZWRGaWxlID0gZmlsZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGVhcmxpZXN0Q3JlYXRlZEZpbGU7XHJcbn1cclxuXHJcbiAgXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3RNb2RpZmllZEZpbGUoZmlsZXM6IFRGaWxlW10pOiBURmlsZSB7XHJcblx0bGV0IGVhcmxpZXN0TW9kaWZpZWRGaWxlOiBURmlsZSA9IGZpbGVzWzBdO1xyXG5cdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG5cdFx0aWYgKGZpbGUuc3RhdC5tdGltZSA8IGVhcmxpZXN0TW9kaWZpZWRGaWxlLnN0YXQubXRpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RNb2RpZmllZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RNb2RpZmllZEZpbGU7XHJcbn0gIFxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWFybGllc3REYXRlRmlsZShmaWxlczogVEZpbGVbXSk6IFRGaWxlIHtcclxuXHRsZXQgZWFybGllc3RDcmVhdGVkRmlsZTogVEZpbGUgPSBmaWxlc1swXTtcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHRcdGlmIChmaWxlLnN0YXQuY3RpbWUgPCBlYXJsaWVzdENyZWF0ZWRGaWxlLnN0YXQuY3RpbWUpIHtcclxuXHRcdFx0ZWFybGllc3RDcmVhdGVkRmlsZSA9IGZpbGU7XHJcblx0XHR9XHJcblx0XHRpZiAoZmlsZS5zdGF0Lm10aW1lIDwgZWFybGllc3RDcmVhdGVkRmlsZS5zdGF0LmN0aW1lKSB7XHJcblx0XHRcdGVhcmxpZXN0Q3JlYXRlZEZpbGUgPSBmaWxlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZWFybGllc3RDcmVhdGVkRmlsZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtb250aHNCZXR3ZWVuKHN0YXJ0TW9udGg6IERhdGUsIGVuZE1vbnRoOiBEYXRlKTogbnVtYmVyIHtcclxuXHRsZXQgbW9udGhzID0gKGVuZE1vbnRoLmdldE1vbnRoKCkgLSBzdGFydE1vbnRoLmdldE1vbnRoKCkpICsgMTtcclxuXHRpZiAoZW5kTW9udGguZ2V0RnVsbFllYXIoKSA+IHN0YXJ0TW9udGguZ2V0RnVsbFllYXIoKSkge1xyXG5cdFx0bW9udGhzICs9IChlbmRNb250aC5nZXRGdWxsWWVhcigpIC0gc3RhcnRNb250aC5nZXRGdWxsWWVhcigpKSoxMjtcclxuXHR9XHJcblx0cmV0dXJuIG1vbnRocztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvbkRhdGVzKGZpbGVzOiBURmlsZVtdKTogQXJyYXk8RGF0ZT4ge1xyXG5cdGNvbnN0IGNyZWF0aW9uRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XHJcbiAgXHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRjcmVhdGlvbkRhdGVzLnB1c2gobmV3IERhdGUoZmlsZS5zdGF0LmN0aW1lKSk7XHJcblx0fVxyXG4gIFxyXG5cdHJldHVybiBjcmVhdGlvbkRhdGVzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGlmaWNhdGlvbkRhdGVzKGZpbGVzOiBURmlsZVtdKTogQXJyYXk8RGF0ZT4ge1xyXG5cdGNvbnN0IGNyZWF0aW9uRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XHJcbiAgXHJcblx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblx0XHRjcmVhdGlvbkRhdGVzLnB1c2gobmV3IERhdGUoZmlsZS5zdGF0Lm10aW1lKSk7XHJcblx0fVxyXG4gIFxyXG5cdHJldHVybiBjcmVhdGlvbkRhdGVzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0Rm9ybWF0KHlfYXhpczogc3RyaW5nLCBjb3VudHNTdHJpbmdNb2Q6IHN0cmluZywgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRsZXQgbW9uYXRzYmVncmVuenVuZyA9IG51bGxcclxuXHRpZiAoY2hhcnRSZWR1emllcnVuZ01vbmF0ZSA9PSAwKXtcclxuXHRcdG1vbmF0c2JlZ3Jlbnp1bmcgPSAwXHJcblx0fSBlbHNlIHtcclxuXHRcdG1vbmF0c2JlZ3Jlbnp1bmcgPSBjb3VudHNTdHJpbmdNb2Quc3BsaXQoJywnKS5sZW5ndGggLSBjaGFydFJlZHV6aWVydW5nTW9uYXRlXHJcblx0fVxyXG5cdFxyXG5cdC8vY29uc3QgbW9uYXRzYmVncmVuenVuZyA9IGxlbmd0aGNvdW50c1N0cmluZ0NyZWF0ZSAtIHRoaXMuc2V0dGluZ3MuY2hhcnRSZWR1emllcnVuZ01vbmF0ZVxyXG5cdHJldHVybiBcImBgYGNoYXJ0XFxudHlwZTogYmFyXFxubGFiZWxzOiBbXCIgKyB5X2F4aXMgKyBcIl1cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBtb2RpZmllZFxcbiAgICBkYXRhOiBbXCIgKyBjb3VudHNTdHJpbmdNb2QgKyBcIl1cXG50ZW5zaW9uOiAwLjJcXG53aWR0aDogODAgJVxcbmxhYmVsQ29sb3JzOiBmYWxzZVxcbmZpbGw6IGZhbHNlXFxuYmVnaW5BdFplcm86IGZhbHNlXFxuYmVzdEZpdDogZmFsc2VcXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxcbmJlc3RGaXROdW1iZXI6IDBcXG5zdGFja2VkOiB0cnVlXFxueVRpdGxlOiBcXFwiTnVtYmVyIG9mIE5vdGVzXFxcIlxcbnhUaXRsZTogXFxcIk1vbnRoc1xcXCJcXG54TWluOiBcIiArIG1vbmF0c2JlZ3Jlbnp1bmcgKyBcIlxcbmBgYFwiO1xyXG59XHJcblxyXG4gIFxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUNoYXJ0Q29udGVudCAoYXZhdGFyUGFnZU5hbWU6IHN0cmluZywgbmV3Q29udGVudDogc3RyaW5nKSB7XHJcblx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRpZiAoZXhpc3RpbmdGaWxlID09IG51bGwpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0Y29uc3QgZmlsZSA9IGV4aXN0aW5nRmlsZSBhcyBURmlsZTtcclxuXHJcblx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBlbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xyXG5cdFx0aWYgKGxpbmUgPT09IFwiXkNoYXJ0TW9udGhcIikge1xyXG5cdFx0XHRpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRpZiAocmVmZXJlbmNlICE9IG51bGwpe1xyXG5cdFx0ZW5kID0gcmVmZXJlbmNlO1xyXG5cdFx0c3RhcnQgPSByZWZlcmVuY2UgLSAxOTtcclxuXHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgbmV3Q29udGVudCwgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgICBsZXZlbDogc3RyaW5nO1xyXG4gIH1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lmUmVjZWl2ZUFCYWRnZShsZXZlbE9sZDogbnVtYmVyLCBsZXZlbE5ldzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gIGxldCByZWNlaXZlQmFkZ2UgPSBmYWxzZVxyXG4gIGZvciAobGV0IGk9MDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKXtcclxuICAgIGlmIChsZXZlbE9sZCA8IGJhZGdlTGV2ZWxzW2ldICYmIGxldmVsTmV3ID49IGJhZGdlTGV2ZWxzW2ldKXtcclxuICAgICAgcmVjZWl2ZUJhZGdlID0gdHJ1ZVxyXG4gICAgfSBcclxuICB9XHJcbiAgcmV0dXJuIHJlY2VpdmVCYWRnZVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyLCBpbmZvcm06IGJvb2xlYW4pOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiwgbGV2ZWw6IFwibGV2ZWwgNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiAsIGxldmVsOiBcImxldmVsIDEwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiAsIGxldmVsOiBcImxldmVsIDI3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2UgT3dsIEd1cnVcIiwgZGVzY3JpcHRpb246IFwiV2hvby1ob28hIFlvdSd2ZSBhY2hpZXZlZCAnV2lzZSBPd2wgR3VydScgc3RhdHVzLiBZb3VyIHdpc2RvbSBpcyBsZWdlbmRhcnksIGFuZCB5b3VyIGhvb3RzIG9mIGtub3dsZWRnZSBlY2hvIHRocm91Z2ggdGhlIGZvcmVzdCBvZiBpZ25vcmFuY2UhXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFaW5zdGVpbiBJbmNhcm5hdGVcIiwgZGVzY3JpcHRpb246IFwiRXVyZWthISBZb3UndmUgYmVjb21lIGFuICdFaW5zdGVpbiBJbmNhcm5hdGUsJyBwdXNoaW5nIHRoZSBib3VuZGFyaWVzIG9mIHVuZGVyc3RhbmRpbmcgYW5kIGJlbmRpbmcgdGhlIGZhYnJpYyBvZiBrbm93bGVkZ2UgdG8geW91ciB3aWxsIVwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTWFzdGVybWluZCBTYWdlXCIsIGRlc2NyaXB0aW9uOiBcIk1hZ25pZmljZW50ISBZb3UndmUgYXNjZW5kZWQgdG8gdGhlIHJhbmsgb2YgJ01hc3Rlcm1pbmQgU2FnZSwnIGd1aWRpbmcgdGhlIHJpdmVycyBvZiBpbmZvcm1hdGlvbiBhbmQgZW5saWdodGVuaW5nIGFsbCB3aG8gc2VlayB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDZXJlYnJhbCBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZpc3NpbW8hIFlvdSdyZSBub3cgYSAnQ2VyZWJyYWwgTWFlc3RybywnIGNvbmR1Y3RpbmcgdGhlIHN5bXBob255IG9mIGtub3dsZWRnZSB3aXRoIHRoZSBmaW5lc3NlIG9mIGEgdmlydHVvc28gY29uZHVjdG9yIVwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiWmVuIEtub3dsZWRnZSBLZWVwZXJcIiwgZGVzY3JpcHRpb246IFwiU2VyZW5pdHkgYWNoaWV2ZWQhIEFzIGEgJ1plbiBLbm93bGVkZ2UgS2VlcGVyLCcgeW91IG1haW50YWluIGEgdHJhbnF1aWwgbWluZCB3aGlsZSBtYW5hZ2luZyB2YXN0IHBvb2xzIG9mIGtub3dsZWRnZSB3aXRoIGdyYWNlIGFuZCBwb2lzZS5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZFwiLCBkZXNjcmlwdGlvbjogXCJBbGwgaGFpbCB0aGUgJ0dyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCEnIFlvdSB3aWVsZCB0aGUga25vd2xlZGdlIG9mIGFnZXMgYW5kIGhvbGQgdGhlIGtleXMgdG8gdW5sb2NrIHRoZSBnYXRlcyBvZiB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZ1wiLCBkZXNjcmlwdGlvbjogXCJDb25ncmF0dWxhdGlvbnMsIG9oIHdpc2Ugb25lISBZb3UndmUgYXR0YWluZWQgdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgZW5saWdodGVubWVudCBhcyB0aGUgJ09tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nLicgWW91ciB1bmRlcnN0YW5kaW5nIGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgd2lzZG9tIGlzIGFzIHZhc3QgYXMgdGhlIGNvc21vcyBpdHNlbGYhXCIsIGxldmVsOiBcImxldmVsIDEwMFwiICB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNbaW5kZXhdXHJcbiAgfVxyXG4gIFxyXG5cclxuXHJcbiAgZXhwb3J0ICBmdW5jdGlvbiBnZXRCYWRnZUZvckluaXRMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzAsIDMsIDcsIDE1LCAyMywgMzAsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lc0luaXQ6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIFNlZWtlciBJbml0aWF0ZVwiLCBkZXNjcmlwdGlvbjogXCJXZWxjb21lIHRvIHRoZSBqb3VybmV5IG9mIGtub3dsZWRnZSEgQXMgYSAnTG9yZSBTZWVrZXIgSW5pdGlhdGUsJyB5b3UndmUgdGFrZW4geW91ciBmaXJzdCBzdGVwcyBpbnRvIHRoZSB3b3JsZCBvZiBvcmdhbml6ZWQgd2lzZG9tLiBZb3VyIHF1ZXN0IGhhcyBqdXN0IGJlZ3VuLCBhbmQgd2l0aCBlYWNoIG5vdGUgeW91IG1ha2UsIHlvdSBsYXkgdGhlIGZvdW5kYXRpb24gZm9yIGEgZnV0dXJlIHJpY2ggd2l0aCBpbnNpZ2h0cyBhbmQgdW5kZXJzdGFuZGluZy4gWW91ciBqb3VybmV5IHN0YXJ0cyBoZXJlLCBhbmQgdGhlIHBhdGggYWhlYWQgaXMgZmlsbGVkIHdpdGggcG90ZW50aWFsIGFuZCBkaXNjb3ZlcnkuXCIsIGxldmVsOiBcImxldmVsIDFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBBcHByZW50aWNlXCIsIGRlc2NyaXB0aW9uOiBcIllvdSd2ZSBoaXQgdGhlIGdyb3VuZCBydW5uaW5nIHdpdGggeW91ciBleGlzdGluZyBrbm93bGVkZ2UgdHJlYXN1cmVzISBZb3UncmUgYWxyZWFkeSBhbiAnTG9yZSBBcHByZW50aWNlLCcgYXJtZWQgd2l0aCBhIHdlYWx0aCBvZiB3aXNkb20gYW5kIHJlYWR5IHRvIHNoYXBlIGl0IGZ1cnRoZXIuXCIsIGxldmVsOiBcImxldmVsIDNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2F2dnkgU2Nob2xhclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgZ2l2ZW4geW91IGEgaGVhZCBzdGFydCEgWW91J3JlIG5vdyBhICdTYXZ2eSBTY2hvbGFyLCcgY29uZmlkZW50bHkgZGl2aW5nIGludG8gdGhlIHNlYSBvZiBpbmZvcm1hdGlvbiB3aXRoIGEgdHJlYXN1cmUgdHJvdmUgb2YgaW5zaWdodHMuXCIgLCBsZXZlbDogXCJsZXZlbCA3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhZ2UncyBGb3VuZGF0aW9uXCIsIGRlc2NyaXB0aW9uOiBcIkJ1aWxkaW5nIHVwb24geW91ciBwcmUtZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSBlc3RhYmxpc2hpbmcgdGhlICdTYWdlJ3MgRm91bmRhdGlvbicgZm9yIGFuIGV2ZW4gZ3JhbmRlciBlZGlmaWNlIG9mIGtub3dsZWRnZS4gWW91ciBncm91bmR3b3JrIGlzIGltcHJlc3NpdmUhXCIgLCBsZXZlbDogXCJsZXZlbCAxNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNkb20gU2VlZGxpbmdcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG51cnR1cmVkIHRoZSBncm93dGggb2YgYSAnV2lzZG9tIFNlZWRsaW5nLicgWW91J3JlIGN1bHRpdmF0aW5nIHlvdXIgZ2FyZGVuIG9mIGtub3dsZWRnZSB3aXRoIGNhcmUgYW5kIHBhdGllbmNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgMjNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiUHJvZGlnaW91cyBQcmVwYXJlclwiLCBkZXNjcmlwdGlvbjogXCJUaGFua3MgdG8geW91ciBwcmlvciBlZmZvcnRzLCB5b3UncmUgYSAnUHJvZGlnaW91cyBQcmVwYXJlciwnIHN0YW5kaW5nIHRhbGwgYW1vbmcgeW91ciBub3RlcyBhbmQgcmVhZHkgdG8gY29ucXVlciBuZXcgcmVhbG1zIG9mIHVuZGVyc3RhbmRpbmcuXCIgLCBsZXZlbDogXCJsZXZlbCAzMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFcGljIEVwaXBoYW55IEV4cGxvcmVyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgcGFzdCBub3RlcyBoYXZlIGxlZCB5b3UgdG8gdGhlIGdyYW5kICdFcGljIEVwaXBoYW55IEV4cGxvcmVyJyBzdGF0dXMhIFlvdSd2ZSBhbHJlYWR5IGJlZW4gZG93biBhIGZldyByYWJiaXQgaG9sZXMgYW5kIGNvbWUgb3V0IHdpdGggZGF6emxpbmcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEx1bWluYXJ5XCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBpbGx1bWluYXRpbmcgeW91ciBwYXRoLCB5b3UndmUgYmVjb21lIGEgJ0xvcmUgTHVtaW5hcnksJyBzaGluaW5nIGxpZ2h0IG9uIHRoZSBteXN0ZXJpZXMgb2YgdGhlIHVuaXZlcnNlLCBvbmUgaWRlYSBhdCBhIHRpbWUuXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY3JpYmUgb2YgdGhlIEFuY2llbnRzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgbWFzdGVyeSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFuYWdlbWVudCBoYXMgZWxldmF0ZWQgeW91IHRvIHRoZSBlc3RlZW1lZCByYW5rIG9mIHRoZSAnU2NyaWJlIG9mIHRoZSBBbmNpZW50cy4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSB0cmFuc2Zvcm1lZCBpbnRvIHRyZWFzdXJlcywgYnJpZGdpbmcgdGhlIGdhcCBiZXR3ZWVuIG9sZCB3aXNkb20gYW5kIG5ldyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV1cmVrYSBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkFybWVkIHdpdGggeW91ciBleGlzdGluZyBub3RlcywgeW91J3JlIHRoZSAnRXVyZWthIE1hZXN0cm8sJyBjb21wb3NpbmcgYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSB3aXRoIHRoZSBtZWxvZHkgb2YgZGlzY292ZXJ5LlwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2hyb25pY2xlcyBDaGFtcGlvblwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgc3RhbmRpbmcgYXMgYSB0ZXN0YW1lbnQsIHlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgaWxsdXN0cmlvdXMgJ0Nocm9uaWNsZXMgQ2hhbXBpb24nIGxldmVsLiBZb3VyIGpvdXJuZXkgdGhyb3VnaCB0aW1lJ3MgdGFwZXN0cnkgaGFzIGJyb3VnaHQgZm9ydGggYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSBwYXN0IGFuZCBwcmVzZW50LlwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyXCIsIGRlc2NyaXB0aW9uOiBcIkFzICdUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXIsJyB5b3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFwcGVkIG91dCB1bmNoYXJ0ZWQgdGVycml0b3JpZXMgb2YgdW5kZXJzdGFuZGluZy4gWW91ciBjdXJpb3NpdHkga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciBub3RlcyBhcmUgdGhlIGNvbXBhc3MgZ3VpZGluZyB5b3VyIGV4cGxvcmF0aW9uLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU3VsdGFuIG9mIFN5bnRoZXNpc1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFkZSB5b3UgdGhlICdTdWx0YW4gb2YgU3ludGhlc2lzLicgWW91J3JlIHRoZSBtYXN0ZXIgd2VhdmVyLCB0aHJlYWRpbmcgdG9nZXRoZXIgdGhyZWFkcyBvZiBpbmZvcm1hdGlvbiBpbnRvIGEgcmljaCB0YXBlc3RyeSBvZiBpbnNpZ2h0LlwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXRlcm5hbCBBcmNoaXZpc3RcIiwgZGVzY3JpcHRpb246IFwiQXQgdGhlIHBpbm5hY2xlIG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYXN0ZXJ5LCB5b3UncmUgbm93IHJldmVyZWQgYXMgdGhlICdFdGVybmFsIEFyY2hpdmlzdC4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMsIGNhcmVmdWxseSBjdXJhdGVkIGFuZCBudXJ0dXJlZCwgc3RhbmQgYXMgaW1tb3J0YWwgYmVhY29ucywgZ3VpZGluZyBzZWVrZXJzIHRocm91Z2ggdGhlIGxhYnlyaW50aCBvZiBrbm93bGVkZ2UgYWNyb3NzIGFnZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAxMDBcIiB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNJbml0W2luZGV4XVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIEV4YW1wbGUgdXNhZ2U6XHJcbiAgLy8gY29uc3QgY3VycmVudExldmVsID0gNDI7IC8vIFJlcGxhY2UgdGhpcyB3aXRoIHRoZSBhY3R1YWwgcGxheWVyJ3MgbGV2ZWxcclxuICAvLyBjb25zdCBiYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoY3VycmVudExldmVsKTtcclxuICAvLyBjb25zb2xlLmxvZyhgQ29uZ3JhdHVsYXRpb25zISBZb3UndmUgcmVhY2hlZCBMZXZlbCAke2N1cnJlbnRMZXZlbH0uIFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApO1xyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuICAgIC8qXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiB9LFxyXG4gICAgICAvLyBBZGQgbW9yZSBiYWRnZXMgaGVyZSBmb3IgbGV2ZWxzIDUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCBhbmQgMTAwXHJcbiAgICAgIC8vIEV4YW1wbGU6XHJcbiAgICAgIC8vIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiIH0sXHJcbiAgICAgIC8vIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgfSxcclxuICAgICAgLy8gLi4uYW5kIHNvIG9uXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgY29uc3QgbWF4TGV2ZWwgPTEwMDsgLy8gQXNzdW1pbmcgZWFjaCBiYWRnZSBpcyBhd2FyZGVkIGV2ZXJ5IDUgbGV2ZWxzXHJcbiAgICBjb25zdCBjYXBwZWRMZXZlbCA9IE1hdGgubWluKGxldmVsLCBtYXhMZXZlbCk7XHJcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoY2FwcGVkTGV2ZWwgLyA1KSAtIDE7XHJcbiAgICByZXR1cm4gYmFkZ2VzW2luZGV4XTtcclxuICB9XHJcbiAgXHJcblxyXG4gIGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIH1cclxuICAqL1xyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBMZXZlbERhdGEge1xyXG4gICAgcG9pbnRzOiBudW1iZXI7XHJcbiAgICBsZXZlbDogbnVtYmVyO1xyXG4gICAgcG9pbnRzTmV4dDogbnVtYmVyO1xyXG4gIH1cclxuICBcclxuICBjb25zdCBsZXZlbERhdGE6IExldmVsRGF0YVtdID0gW1xyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAwLCBwb2ludHNOZXh0OiAwfSxcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMSwgcG9pbnRzTmV4dDogMTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDAsIGxldmVsOiAyLCBwb2ludHNOZXh0OiAzMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMCwgbGV2ZWw6IDMsIHBvaW50c05leHQ6IDc1MDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwLCBsZXZlbDogNCwgcG9pbnRzTmV4dDogMTUwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTAwMCwgbGV2ZWw6IDUsIHBvaW50c05leHQ6IDMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAsIGxldmVsOiA2LCBwb2ludHNOZXh0OiA1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwMDAwLCBsZXZlbDogNywgcG9pbnRzTmV4dDogODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MDAwMCwgbGV2ZWw6IDgsIHBvaW50c05leHQ6IDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMDAwMCwgbGV2ZWw6IDksIHBvaW50c05leHQ6IDE3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3MDAwMCwgbGV2ZWw6IDEwLCBwb2ludHNOZXh0OiAyMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzAwMDAsIGxldmVsOiAxMSwgcG9pbnRzTmV4dDogMzAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwLCBsZXZlbDogMTIsIHBvaW50c05leHQ6IDM4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4MDAwMCwgbGV2ZWw6IDEzLCBwb2ludHNOZXh0OiA0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzAwMDAsIGxldmVsOiAxNCwgcG9pbnRzTmV4dDogNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjAwMDAwLCBsZXZlbDogMTUsIHBvaW50c05leHQ6IDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAwMCwgbGV2ZWw6IDE2LCBwb2ludHNOZXh0OiA5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjAwMDAsIGxldmVsOiAxNywgcG9pbnRzTmV4dDogMTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMTAwMDAsIGxldmVsOiAxOCwgcG9pbnRzTmV4dDogMTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMjAwMDAsIGxldmVsOiAxOSwgcG9pbnRzTmV4dDogMTU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1NTAwMDAsIGxldmVsOiAyMCwgcG9pbnRzTmV4dDogMTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4MDAwMDAsIGxldmVsOiAyMSwgcG9pbnRzTmV4dDogMjA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwNzAwMDAsIGxldmVsOiAyMiwgcG9pbnRzTmV4dDogMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzNjAwMDAsIGxldmVsOiAyMywgcG9pbnRzTmV4dDogMjY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2NzAwMDAsIGxldmVsOiAyNCwgcG9pbnRzTmV4dDogMzAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMDAsIGxldmVsOiAyNSwgcG9pbnRzTmV4dDogMzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNTAwMDAsIGxldmVsOiAyNiwgcG9pbnRzTmV4dDogMzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MjAwMDAsIGxldmVsOiAyNywgcG9pbnRzTmV4dDogNDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMTAwMDAsIGxldmVsOiAyOCwgcG9pbnRzTmV4dDogNDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MjAwMDAsIGxldmVsOiAyOSwgcG9pbnRzTmV4dDogNDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5NTAwMDAsIGxldmVsOiAzMCwgcG9pbnRzTmV4dDogNTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0MDAwMDAsIGxldmVsOiAzMSwgcG9pbnRzTmV4dDogNTg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU4NzAwMDAsIGxldmVsOiAzMiwgcG9pbnRzTmV4dDogNjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYzNjAwMDAsIGxldmVsOiAzMywgcG9pbnRzTmV4dDogNjg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY4NzAwMDAsIGxldmVsOiAzNCwgcG9pbnRzTmV4dDogNzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDAwMDAsIGxldmVsOiAzNSwgcG9pbnRzTmV4dDogNzk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5NTAwMDAsIGxldmVsOiAzNiwgcG9pbnRzTmV4dDogODUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg1MjAwMDAsIGxldmVsOiAzNywgcG9pbnRzTmV4dDogOTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkxMTAwMDAsIGxldmVsOiAzOCwgcG9pbnRzTmV4dDogOTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk3MjAwMDAsIGxldmVsOiAzOSwgcG9pbnRzTmV4dDogMTAzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDM1MDAwMCwgbGV2ZWw6IDQwLCBwb2ludHNOZXh0OiAxMTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMDAwMDAwLCBsZXZlbDogNDEsIHBvaW50c05leHQ6IDExNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTE2NzAwMDAsIGxldmVsOiA0MiwgcG9pbnRzTmV4dDogMTIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjM2MDAwMCwgbGV2ZWw6IDQzLCBwb2ludHNOZXh0OiAxMzA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMDcwMDAwLCBsZXZlbDogNDQsIHBvaW50c05leHQ6IDEzODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTM4MDAwMDAsIGxldmVsOiA0NSwgcG9pbnRzTmV4dDogMTQ1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNDU1MDAwMCwgbGV2ZWw6IDQ2LCBwb2ludHNOZXh0OiAxNTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MzIwMDAwLCBsZXZlbDogNDcsIHBvaW50c05leHQ6IDE2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTYxMTAwMDAsIGxldmVsOiA0OCwgcG9pbnRzTmV4dDogMTY5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjkyMDAwMCwgbGV2ZWw6IDQ5LCBwb2ludHNOZXh0OiAxNzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3NzUwMDAwLCBsZXZlbDogNTAsIHBvaW50c05leHQ6IDE4NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTg2MDAwMDAsIGxldmVsOiA1MSwgcG9pbnRzTmV4dDogMTk0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxOTQ3MDAwMCwgbGV2ZWw6IDUyLCBwb2ludHNOZXh0OiAyMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwMzYwMDAwLCBsZXZlbDogNTMsIHBvaW50c05leHQ6IDIxMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjEyNzAwMDAsIGxldmVsOiA1NCwgcG9pbnRzTmV4dDogMjIyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMjIwMDAwMCwgbGV2ZWw6IDU1LCBwb2ludHNOZXh0OiAyMzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMTUwMDAwLCBsZXZlbDogNTYsIHBvaW50c05leHQ6IDI0MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjQxMjAwMDAsIGxldmVsOiA1NywgcG9pbnRzTmV4dDogMjUxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNTExMDAwMCwgbGV2ZWw6IDU4LCBwb2ludHNOZXh0OiAyNjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2MTIwMDAwLCBsZXZlbDogNTksIHBvaW50c05leHQ6IDI3MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjcxNTAwMDAsIGxldmVsOiA2MCwgcG9pbnRzTmV4dDogMjgyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyODIwMDAwMCwgbGV2ZWw6IDYxLCBwb2ludHNOZXh0OiAyOTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI5MjcwMDAwLCBsZXZlbDogNjIsIHBvaW50c05leHQ6IDMwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAzNjAwMDAsIGxldmVsOiA2MywgcG9pbnRzTmV4dDogMzE0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMTQ3MDAwMCwgbGV2ZWw6IDY0LCBwb2ludHNOZXh0OiAzMjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMyNjAwMDAwLCBsZXZlbDogNjUsIHBvaW50c05leHQ6IDMzNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM3NTAwMDAsIGxldmVsOiA2NiwgcG9pbnRzTmV4dDogMzQ5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNDkyMDAwMCwgbGV2ZWw6IDY3LCBwb2ludHNOZXh0OiAzNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM2MTEwMDAwLCBsZXZlbDogNjgsIHBvaW50c05leHQ6IDM3MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzczMjAwMDAsIGxldmVsOiA2OSwgcG9pbnRzTmV4dDogMzg1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODU1MDAwMCwgbGV2ZWw6IDcwLCBwb2ludHNOZXh0OiAzOTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM5ODAwMDAwLCBsZXZlbDogNzEsIHBvaW50c05leHQ6IDQxMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDEwNzAwMDAsIGxldmVsOiA3MiwgcG9pbnRzTmV4dDogNDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MjM2MDAwMCwgbGV2ZWw6IDczLCBwb2ludHNOZXh0OiA0MzY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQzNjcwMDAwLCBsZXZlbDogNzQsIHBvaW50c05leHQ6IDQ1MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUwMDAwMDAsIGxldmVsOiA3NSwgcG9pbnRzTmV4dDogNDYzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NjM1MDAwMCwgbGV2ZWw6IDc2LCBwb2ludHNOZXh0OiA0NzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3NzIwMDAwLCBsZXZlbDogNzcsIHBvaW50c05leHQ6IDQ5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDkxMTAwMDAsIGxldmVsOiA3OCwgcG9pbnRzTmV4dDogNTA1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDUyMDAwMCwgbGV2ZWw6IDc5LCBwb2ludHNOZXh0OiA1MTk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUxOTUwMDAwLCBsZXZlbDogODAsIHBvaW50c05leHQ6IDUzNDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTM0MDAwMDAsIGxldmVsOiA4MSwgcG9pbnRzTmV4dDogNTQ4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDg3MDAwMCwgbGV2ZWw6IDgyLCBwb2ludHNOZXh0OiA1NjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU2MzYwMDAwLCBsZXZlbDogODMsIHBvaW50c05leHQ6IDU3ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTc4NzAwMDAsIGxldmVsOiA4NCwgcG9pbnRzTmV4dDogNTk0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1OTQwMDAwMCwgbGV2ZWw6IDg1LCBwb2ludHNOZXh0OiA2MDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwOTUwMDAwLCBsZXZlbDogODYsIHBvaW50c05leHQ6IDYyNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjI1MjAwMDAsIGxldmVsOiA4NywgcG9pbnRzTmV4dDogNjQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NDExMDAwMCwgbGV2ZWw6IDg4LCBwb2ludHNOZXh0OiA2NTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY1NzIwMDAwLCBsZXZlbDogODksIHBvaW50c05leHQ6IDY3MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjczNTAwMDAsIGxldmVsOiA5MCwgcG9pbnRzTmV4dDogNjkwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2OTAwMDAwMCwgbGV2ZWw6IDkxLCBwb2ludHNOZXh0OiA3MDY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcwNjcwMDAwLCBsZXZlbDogOTIsIHBvaW50c05leHQ6IDcyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzIzNjAwMDAsIGxldmVsOiA5MywgcG9pbnRzTmV4dDogNzQwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDA3MDAwMCwgbGV2ZWw6IDk0LCBwb2ludHNOZXh0OiA3NTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1ODAwMDAwLCBsZXZlbDogOTUsIHBvaW50c05leHQ6IDc3NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzc1NTAwMDAsIGxldmVsOiA5NiwgcG9pbnRzTmV4dDogNzkzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTMyMDAwMCwgbGV2ZWw6IDk3LCBwb2ludHNOZXh0OiA4MTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgxMTEwMDAwLCBsZXZlbDogOTgsIHBvaW50c05leHQ6IDgyOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODI5MjAwMDAsIGxldmVsOiA5OSwgcG9pbnRzTmV4dDogODQ3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NDc1MDAwMCwgbGV2ZWw6IDEwMCwgcG9pbnRzTmV4dDogODY2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NjYwMDAwMCwgbGV2ZWw6IDEwMSwgcG9pbnRzTmV4dDogODg0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4ODQ3MDAwMCwgbGV2ZWw6IDEwMiwgcG9pbnRzTmV4dDogOTAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MDM2MDAwMCwgbGV2ZWw6IDEwMywgcG9pbnRzTmV4dDogOTIyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjI3MDAwMCwgbGV2ZWw6IDEwNCwgcG9pbnRzTmV4dDogOTQyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NDIwMDAwMCwgbGV2ZWw6IDEwNSwgcG9pbnRzTmV4dDogOTYxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NjE1MDAwMCwgbGV2ZWw6IDEwNiwgcG9pbnRzTmV4dDogOTgxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5ODEyMDAwMCwgbGV2ZWw6IDEwNywgcG9pbnRzTmV4dDogMTAwMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMTEwMDAwLCBsZXZlbDogMTA4LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDIxMjAwMDAsIGxldmVsOiAxMDksIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwNDE1MDAwMCwgbGV2ZWw6IDExMCwgcG9pbnRzTmV4dDogMTA2MTUwMDAwIH0sXHJcbiAgXTtcclxuICBcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzOiBudW1iZXIpOiBMZXZlbERhdGEge1xyXG4gICAgbGV0IGxldmVsIDpMZXZlbERhdGEgPSBsZXZlbERhdGFbMF07XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmIChwb2ludHMgPj0gZGF0YS5wb2ludHMpIHtcclxuICAgICAgICBsZXZlbCA9IGRhdGE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsZXZlbDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBzdGF0dXNQb2ludHNGb3JMZXZlbCh0YXJnZXRMZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBzdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAodGFyZ2V0TGV2ZWwgPT0gZGF0YS5sZXZlbCAmJiBzdGF0dXNQb2ludHMgPT0gMCkge1xyXG4gICAgICAgIHN0YXR1c1BvaW50cyA9IGRhdGEucG9pbnRzO1xyXG4gICAgICB9IFxyXG4gICAgfVxyXG5cclxuXHRcdFxyXG5cdFx0cmV0dXJuIHN0YXR1c1BvaW50c1xyXG4gIH1cclxuICBcclxuXHJcbi8qXHJcbmNvbnN0IHBvaW50cyA9IDU1MDA7XHJcbmNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzKTtcclxuY29uc29sZS5sb2coYFdpdGggJHtwb2ludHN9IHBvaW50cywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgJHtsZXZlbH0uYCk7XHJcbiovIiwgImNvbnN0IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlOiBzdHJpbmdbXSA9IFtcclxuXHRcIlNldmVuIGRheXMgb2Ygbm90ZS10YWtpbmc/IFlvdSdyZSBwcmFjdGljYWxseSBhIG5vdGUgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgZmllc3RhISBcdUQ4M0NcdURGODlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgcGFydHkgZ29pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIFlvdSdyZSBsaWtlIHRoZSBKYW1lcyBCb25kIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURENzZcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2VjcmV0IGFnZW50IVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAnTm90ZS1BLURheScgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2FwZXMgb3B0aW9uYWwhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSd2ZSBwcmFjdGljYWxseSB3cml0dGVuIGEgbWluaSBub3ZlbCBieSBub3chIFx1RDgzRFx1RENEQVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBhdXRob3Igc3RhdHVzIGFjaGlldmVkIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBVc2FpbiBCb2x0IG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc3ByaW50aW5nIHRvd2FyZHMga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNwcmVlISBJdCdzIGxpa2UgYSBub3Rlcy1wbG9zaW9uISBcdUQ4M0RcdURDQTVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgZmlyZXdvcmtzIGNvbWluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGJhc2ljYWxseSB0aGUgTWljaGFlbCBKb3JkYW4gb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDMFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzbGFtIGR1bmshXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTVZQISBcdUQ4M0NcdURGQzZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzY29yaW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlICdTZXZlbiBEYXkgTm90ZSBGZXZlcicgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXRjaCB0aGUgZmV2ZXIhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIHJvY2tzdGFyISBcdUQ4M0NcdURGQjhcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBqYW1taW4nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIG1hZ2ljIHNob3chIE5vdyB5b3Ugc2VlIHRoZSBub3Rlcywgbm93IHlvdSBkb24ndCEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMsIGtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgbGlrZSBhIG5vdGUtdGFraW5nIEplZGkgTWFzdGVyISBcdUQ4M0NcdURGMENcdTI2OTRcdUZFMEYgW1hdIHBvaW50cywgbWF5IHRoZSBub3RlcyBiZSB3aXRoIHlvdSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTWFjR3l2ZXIsIHR1cm5pbmcgaW5mb3JtYXRpb24gaW50byBzb2x1dGlvbnMhIFx1RDgzRFx1REQyN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNyYWZ0aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgY2hlZiwgY29va2luZyB1cCBhIGtub3dsZWRnZSBmZWFzdCEgXHVEODNDXHVERjczXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY29va2luZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0MFx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIExld2lzIGFuZCBDbGFyaywgY2hhcnRpbmcgbmV3IHRlcnJpdG9yaWVzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEREZBXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBkZXRlY3RpdmUsIHNvbHZpbmcgY2FzZXMgb2YgY3VyaW9zaXR5ISBcdUQ4M0RcdURENzVcdUZFMEZcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBkZXRlY3RpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBwaW9uZWVyLCBibGF6aW5nIHRyYWlscyB0aHJvdWdoIHRoZSBmb3Jlc3RzIG9mIGluZm9ybWF0aW9uISBcdUQ4M0NcdURGMzJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwaW9uZWVyaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiXHJcbl07XHJcblxyXG5jb25zdCB0d29Ob3RlTWVzc2FnZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQm9vbSEgWW91IGp1c3QgYWNlZCB0aGUgMi1ub3RlIHRhbmdvISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIGdyb292aW4nIVwiLFxyXG5cdFwiVHdvIG5vdGVzIGluIGEgZGF5PyBZb3UncmUgb2ZmaWNpYWxseSBhIE5vdGUgTmluamEhIFx1RDgzRVx1REQ0QiBbWF0gcG9pbnRzIGVhcm5lZC4gUm9jayBvbiFcIixcclxuXHRcIkhpZ2gtZml2ZSEgWW91J3ZlIGNvbnF1ZXJlZCB0aGUgMi1ub3RlIHJvZGVvISBcdUQ4M0VcdUREMjAgW1hdIHBvaW50cyBlYXJuZWQuIFllZWhhdyFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlISBUd28gbm90ZXMgaW4gb25lIGRheSwgeW91IGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFR3byBub3RlcyBpbiBhIGRheSAtIHdoYXQncyB5b3VyIHNlY3JldCB3ZWFwb24/IFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiS2Fib29tISBZb3UganVzdCBibGV3IHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgd2F0ZXIhIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAyLW5vdGUgc3VwZXJzdGFyISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBpbiB0aGUgYmFnLiBLZWVwIHNoaW5pbmchXCIsXHJcblx0XCJEb3VibGUgdXAsIGRvdWJsZSBkb3duISBUd28gbm90ZXMgaW4gb25lIGRheSAtIHlvdSdyZSBhIHJvY2tzdGFyISBcdUQ4M0NcdURGQjggW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIHBhcnR5ISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIkthLWNoaW5nISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSByYWNraW5nIHVwIHRob3NlIHBvaW50cyEgXHVEODNEXHVEQ0IwIFtYXSBlYXJuZWQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFnaWNpYW4hIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCB0cmljaz9cIixcclxuXHRcIlR3byBub3Rlcz8gTmFpbGVkIGl0ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgZ29pbmchXCIsXHJcblx0XCJBYnJhLWNhZGFicmEhIFR3byBub3RlcyBhcHBlYXIhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSwgZG91YmxlIHRoZSBmdW4hIFR3byBub3RlcyBpbiBvbmUgZGF5ISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIGZpZXN0YSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fwb3chIFR3byBub3RlcyBpbiBhIGRheSAtIHlvdSdyZSBhIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGIFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgYWR2ZW50dXJlP1wiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiXHJcbl07XHJcblxyXG5jb25zdCByYW5kb21Qb2ludE5vdGljZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQmF6aW5nYSEgWW91IGp1c3Qgc25hZ2dlZCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiS2Fib29tISBbWF0gcG9pbnRzIGFyZSBub3cgaW4geW91ciBwb2NrZXQhXCIsXHJcblx0XCJXb29ob28hIFtYXSBwb2ludHMgZWFybmVkISBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiUG9pbnRzIGFob3khIFtYXSBtb3JlIGluIHRoZSBiYW5rIVwiLFxyXG5cdFwiU2NvcmUhIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciB0b3RhbCFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJaaXBwaXR5LXphcCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQ2hhbXBpb24gbW92ZSEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJCaW5nbyEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJTaGF6YW0hIFtYXSBwb2ludHMgdG8gdGhlIHJlc2N1ZSFcIixcclxuXHRcIkthLWNoaW5nISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlN1cGVyYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJCcmF2byEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiV2VsbCBkb25lISBbWF0gbW9yZSBwb2ludHMgaW4gdG93IVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzLCBqdXN0IGxpa2UgdGhhdCFcIixcclxuXHRcIkEgcm91bmQgb2YgYXBwbGF1c2UgZm9yIFtYXSBwb2ludHMhXCIsXHJcblx0XCJXaG9vc2ghIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiV29vISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiR3JlYXQgam9iISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkZhbnRhc3RpYyEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiSG9vcmF5ISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIk5pY2Ugb25lISBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQhXCIsXHJcblx0XCJXb290IHdvb3QhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJhbSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiQ29vbCBiZWFucyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJTcGxlbmRpZCEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTWFydmVsb3VzISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphbnkhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkV4cXVpc2l0ZSEgW1hdIHBvaW50cyBpbiB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiT3V0c3RhbmRpbmchIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIGpvYiFcIixcclxuXHRcIk1hZ25pZmljZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiVGVycmlmaWMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlN1cGVyYiEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIkV4Y2VsbGVudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiQXdlc29tZSEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiV2VsbCBwbGF5ZWQhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJJbXByZXNzaXZlISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQnJpbGxpYW50ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJOaWNlIG1vdmUhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlN0ZWxsYXIhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiV2VsbCBkZXNlcnZlZCEgW1hdIHBvaW50cyBlYXJuZWQhXCJcclxuXTtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZS5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZVtyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdHdvTm90ZU1lc3NhZ2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHR3b05vdGVNZXNzYWdlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyhwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiByYW5kb21Qb2ludE5vdGljZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gcmFuZG9tUG9pbnROb3RpY2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuLy8gRXhhbXBsZSB1c2FnZVxyXG4vLyBjb25zdCByYW5kb21Qb2ludHMgPSAxMDA7IC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjdHVhbCBwb2ludHMgdmFsdWVcclxuLy8gY29uc3QgcmFuZG9tTWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocmFuZG9tUG9pbnRzKTtcclxuLy8gY29uc29sZS5sb2cocmFuZG9tTWVzc2FnZSk7XHJcblxyXG5cclxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQSxtQkFBcUU7OztBQ0FyRSxzQkFBK0M7QUFHeEMsSUFBTSxrQkFBc0M7QUFBQSxFQUNqRCxtQkFBbUI7QUFBQSxFQUNuQixXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxnQkFBZ0I7QUFBQSxFQUNoQixhQUFhO0FBQUEsRUFDYixlQUFlO0FBQUEsRUFDZixzQkFBc0I7QUFBQSxFQUN0QixzQkFBc0I7QUFBQSxFQUN0QixhQUFhO0FBQUEsRUFDYixrQkFBa0I7QUFBQSxFQUNsQix3QkFBd0I7QUFBQSxFQUN4QixjQUFjO0FBQUEsRUFDZCxhQUFhO0FBQUEsRUFDYixnQkFBZ0I7QUFBQSxFQUNoQix1QkFBdUI7QUFBQSxFQUN2QixtQkFBbUI7QUFBQSxFQUNuQixvQkFBb0I7QUFBQSxFQUNwQixPQUFPO0FBQUEsRUFDUCx1QkFBdUI7QUFBQSxFQUN2Qix1QkFBdUI7QUFBQSxFQUN2Qix3QkFBd0I7QUFBQSxFQUN4Qix3QkFBd0I7QUFBQSxFQUN4QixlQUFlO0FBQUEsRUFDZixtQkFBbUI7QUFDckI7QUE4Qk8sSUFBTSw2QkFBTixjQUF5QyxpQ0FBaUI7QUFBQSxFQTRCaEUsWUFBWUMsTUFBVSxRQUFzQjtBQUMxQyxVQUFNQSxNQUFLLE1BQU07QUFDakIsU0FBSyxTQUFTO0FBQUEsRUFDaEI7QUFBQSxFQUVPLFVBQWdCO0FBQ3RCLFVBQU0sRUFBRSxZQUFZLElBQUk7QUFDeEIsZ0JBQVksU0FBUyxxQkFBcUI7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WSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLElBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsS0FBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksS0FBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxNQUFRLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNqRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxJQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLEtBQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDbkQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE1BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsT0FBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN0RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3ZELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFDekQ7QUFFTyxTQUFTLGtCQUFrQixRQUEyQjtBQUMzRCxNQUFJLFFBQW1CLFVBQVUsQ0FBQztBQUNsQyxhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLFVBQVUsS0FBSyxRQUFRO0FBQ3pCLGNBQVE7QUFBQSxJQUNWLE9BQU87QUFDTDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBRU8sU0FBUyxxQkFBcUIsYUFBNkI7QUFDaEUsTUFBSSxlQUFlO0FBQ25CLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksZUFBZSxLQUFLLFNBQVMsZ0JBQWdCLEdBQUc7QUFDbEQscUJBQWUsS0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUdGLFNBQU87QUFDUDs7O0FDOUlGLElBQU0sMEJBQW9DO0FBQUEsRUFDekM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLGtCQUE0QjtBQUFBLEVBQ2pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFFQSxJQUFNLHFCQUErQjtBQUFBLEVBQ3BDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFD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TUFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsb0JBQVEsTUFBTTtBQUVyRCxTQUFPLGlCQUFpQixZQUFZO0FBQ3JDO0FBRUEsU0FBUyw2QkFBNkIsZUFBdUIsV0FBMkI7QUFDdkYsTUFBSTtBQUNKLE1BQUksU0FBUyxlQUFlLEVBQUUsSUFBSSxXQUFVO0FBQzNDLG1CQUFlLFlBQVksU0FBUyxlQUFlLEVBQUU7QUFBQSxFQUN0RCxPQUFPO0FBQ04sbUJBQWU7QUFBQSxFQUNoQjtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImFwcCIsICJvYmoiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiTUlMTElTRUNPTkRTX0lOX1dFRUsiLCAiZm9ybWF0dGVycyIsICJsb2NhbGl6ZSIsICJ5IiwgIk0iLCAiZCIsICJhIiwgImgiLCAiSCIsICJtIiwgInMiLCAiUyIsICJkYXRlTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXRMb25nIiwgInRpbWVMb25nRm9ybWF0dGVyIiwgImRhdGVUaW1lTG9uZ0Zvcm1hdHRlciIsICJmb3JtYXQiLCAiZm9ybWF0RGlzdGFuY2UiLCAiZm9ybWF0IiwgImZvcm1hdFJlbGF0aXZlIiwgIm9yZGluYWxOdW1iZXIiLCAidmFsdWVDYWxsYmFjayIsICJkZWZhdWx0T3B0aW9ucyIsICJsb2NhbGUiLCAibWF0Y2giLCAicGF0aCIsICJhcHAiLCAiZmlsZU5hbWUiLCAiY3VycmVudENvdW50IiwgImkiLCAiaSIsICJlIiwgImkiLCAibWF0Y2giLCAiZmlsZSIsICJhcHAiXQp9Cg== diff --git a/src/constants.ts b/src/constants.ts index 9652516..d12fe63 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -2,6 +2,9 @@ export const pointsNoteMajurity = 100; export const pointsMajurity = 10; export const pointsForDailyChallenge = 500; export const pointsForWeeklyChallenge = 2000; +export const streakboosterDecrease = 0.2; +export const streakboosterIncreaseDaily = 0.1; +export const streakboosterIncreaseWeekly = 1; export const avatarInitContent = `# Avatar | | | diff --git a/src/main.ts b/src/main.ts index 3c356f7..bf12181 100644 --- a/src/main.ts +++ b/src/main.ts @@ -6,7 +6,10 @@ import { pointsMajurity, pointsNoteMajurity, pointsForDailyChallenge, - pointsForWeeklyChallenge + pointsForWeeklyChallenge, + streakboosterDecrease, + streakboosterIncreaseDaily, + streakboosterIncreaseWeekly } from './constants' import { count_inlinks, @@ -42,6 +45,7 @@ export default class gamification extends Plugin { private statusBarItem = this.addStatusBarItem(); private statusbarGamification = this.statusBarItem.createEl("span", { text: "" }); + async onload() { console.log('obsidian-pkm-gamification loaded!'); @@ -520,7 +524,7 @@ export default class gamification extends Plugin { await this.updateAvatarPage(this.settings.avatarPageName); console.log(`${newDailyNoteCreationTask}/2 Notes created today.`) } else if (newDailyNoteCreationTask == 2) { - this.increaseStreakbooster(0.1) + this.increaseStreakbooster(streakboosterIncreaseDaily) //this.settings.streakboosterDate = window.moment().format('DD.MM.YYYY'); await this.saveSettings(); await this.updateStatusBar(this.statusbarGamification) @@ -567,7 +571,7 @@ export default class gamification extends Plugin { await this.updateAvatarPage(this.settings.avatarPageName); console.log(`${newWeeklyNoteCreationTask}/7 Notes created in a chain.`) } else if (newWeeklyNoteCreationTask == 7) { - this.increaseStreakbooster(1); + this.increaseStreakbooster(streakboosterIncreaseWeekly); //this.settings.streakboosterDate = window.moment().format('DD.MM.YYYY'); await this.saveSettings(); await this.giveStatusPoints(pointsForWeeklyChallenge) @@ -642,7 +646,7 @@ export default class gamification extends Plugin { } async increaseStreakbooster(increaseValue:number){ - let newBoosterFakfor = parseFloat((this.settings.streakbooster + increaseValue).toFixed(1)); + let newBoosterFakfor = parseFloat((this.settings.streakbooster + increaseValue).toFixed(streakboosterIncreaseWeekly)); if(newBoosterFakfor > 80){ newBoosterFakfor = 80; } @@ -654,7 +658,7 @@ export default class gamification extends Plugin { async decreaseStreakbooster(decreaseValue:number){ - let newBoosterFakfor = parseFloat((this.settings.streakbooster - decreaseValue).toFixed(1)) + let newBoosterFakfor = parseFloat((this.settings.streakbooster - decreaseValue).toFixed(streakboosterDecrease)) this.settings.streakbooster = newBoosterFakfor if (newBoosterFakfor < 0){ newBoosterFakfor = 0